zoukankan      html  css  js  c++  java
  • Hytrix-豪猪

    Hytrix是什么?


      在分布式缓存中,服务多了肯定会有一些服务会崩。Hystrix是一个库,可以添加延迟容忍和容错逻辑,帮助你控制这些分布式服务之间的交互。通过隔离服务之间的访问点,停止级联失败和提供回退选项来实现这一点,可以提高整个系统的容错性。

    Hytrix设计目标?


      1、对通过第三方客户端库访问的依赖项的延迟和故障进行保护和控制。(这种一般都是网络传输造成的)

      2、在复杂的分布式系统中阻止级联故障。

      3、快速失败、快速恢复

      4、回退,尽可能优雅地降级。

      5、启动近实时监控、警报和操作控制。

    服务熔断最小案例


     开发流程:在product服务中进行

      1、引入依赖

            <!--hystrix-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
            </dependency>

      2、在启动类application加上注解,EnableCircuitBreaker

    @SpringBootApplication
    @EnableDiscoveryClient
    @EnableCircuitBreaker  //断路器
    public class Product9997Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Product9997Application.class, args);
        }
    }

      3、在controller编写测试逻辑

        //如果觉得每个服务都配置同样的一个熔断方法太麻烦了
        //这里有个通用的方法可以进行替换
        //hystrixMethod注解中 fallbackMethod----替换--->defaultFallback=testFallbackMethod
        //将回调方法改成默认的
    
    
        //服务熔断
        @GetMapping("/product/break")   //服务访问路由
        @HystrixCommand(fallbackMethod="testFallbackMethod")   //如果发生服务异常  则服务熔断  执行注解内的方法
        public String testBreak(int id) {
            if(id>0) {
                System.out.println("ok!!!!");   //正常的逻辑
            }else {
                throw new RuntimeException("error------>num <=0!!!!!!");  //产生异常的逻辑
            }
            return "num:" + id;
        }
    
        //服务熔断的时候就会调用这个函数
        public String testFallbackMethod(int id) {
            return "数据不合法------>!" + id;
        }

      4、产生效果,访问的参数满足服务要求的逻辑值,但是如果该参数值低于1,程序内部就会抛出异常。

      当值小于1时,就会抛出异常,熔断器启动,调用熔断方法。如果失败请求满足一定阈值(比如10秒内20次请求),则断路器启动,访问正确的值都会显示数据不合法,直到再次访问回复正常。如果

    服务降级最小案例


     开发流程:在user服务中进行

      1、添加依赖

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
            </dependency>

      2、properties中开启服务降级配置

    #开启服务降级   支持服务降级的技术openfeign
    feign.hystrix.enabled=true

      3、加入访问后台接口,同时注入降级实现类

        //服务降级的路由
        @GetMapping("/product/break")
        public String testBreak(@RequestParam("id")int id);//user服务向product服务访问的接口

      4、创建服务降级实现类,继承productClient接口

    package com.demo.user9998.fallback;
    
    import com.demo.user9998.controller.client.ProductClient;
    import com.demo.user9998.vo.ProductVo;
    import org.springframework.stereotype.Component;
    
    import java.util.Map;
    
    @Component
    public class ProductFallBack implements ProductClient {
    
        //只对这个服务进行服务降级
        @Override
        public String testBreak(int id) {
            return "这个只是测试内容,如果真需要服务降级,就在这里进行具体服务编写";
        }
    
        @Override
        public Map<String, Object> findPs() {
            return null;
        }
    
        @Override
        public String findById(String productId) {
            return null;
        }
    
        @Override
        public String persist(String name) {
            return null;
        }
    
        @Override
        public String save(ProductVo productVo) {
            return null;
        }
    
    }

      5、关闭服务熔断注解,服务降级和服务熔断是两个hytrix两个服务处理方式

      6、在userController中编写服务降级测试

        //测试服务降级
        @GetMapping("/user/breakTest")
        public String breakTest(int id) {
            String result = productClients.testBreak(id);  //感知服务降级
            return result;
        }

      7、演示效果

      符合正常的传参

      异常传参

    总结


      服务熔断是在被访问的服务上,例如product服务,当服务发生异常的时候,捕捉并且调用fallbackMethod方法,执行熔断方法。这个熔断器如果错误的请求发送一定次数到达阈值,当我们再次发送正确请求的时候,还是会报错。这个时候熔断器需要休息一下才能重新恢复访问。

      服务降级是在直接访问服务上,例如user服务,当product服务发生异常的时候,user就会关闭该服务,同时调用的productclient接口的实现类,内部有对该服务的处理方式。这个服务访问的时候是有路由名字的,查看路由对应的方法,找到productclient的方法,调用该实现类同名的方法。开发流程:添加依赖,properties开启服务降级,实现类调用。

  • 相关阅读:
    Codeforces Round #136 (Div. 1) B. Little Elephant and Array
    洛谷 P2966 [USACO09DEC]牛收费路径Cow Toll Paths
    cogs 969. [NOIP2006] 数列
    防止xss(跨站脚本攻击)
    ☀【插件】iScroll
    ☀【移动优化】
    ☀【Zepto】
    ☀【JS】Code
    ☀【响应式设计】屏幕尺寸
    CODEVS——T2744 养鱼喂妹纸
  • 原文地址:https://www.cnblogs.com/HelloM/p/14349600.html
Copyright © 2011-2022 走看看