码迷,mamicode.com
首页 > 编程语言 > 详细

spring cloud 学习(Hystrix)熔断器

时间:2020-10-14 20:12:40      阅读:24      评论:0      收藏:0      [点我收藏+]

标签:imp   width   函数   cloud   pen   级联   frame   处理   打开   

spring cloud 之 Hystrix

Hystrix 是 Netflix 开源的一个延迟和容错库,用于隔离访问远程服务、第三方库,防止出现级联失败(雪崩)

  雪崩:一个服务失败,导致整条链路的服务都失败的情形

Hystrix  主要功能


    • 线程池隔离  默认为这个隔离    为每个模块分配线程池,不会因为某一个模块宕机或者出问题而造成所有的资源被耗尽
    • 技术图片
    • 信号量隔离  为模块添加一个阈值,只能有这么多人访问,超过了就不行
    • 技术图片
  • 降级 :对异常、超时等问题进行处理
    • 技术图片
  • 熔断
  • 限流

1、Hystrix 降级

 提供方降级:

降级产生的原因有: 出现异常      服务调用超时:默认的超时时间是1s,ribbon的超时时间默认也是1s

  • 注入依赖
    • 1  <!-- hystrix -->
      2          <dependency>
      3 
      4              <groupId>org.springframework.cloud</groupId>
      5 
      6              <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
      7          </dependency>
  • 引导类上添加注解 @EnableCircuitBreaker   开启熔断器
  • 定义降级方法
    • 降级方法注意事项:1:方法的返回值要和元方法一致 2.方法的参数需要和原方法一样
    • /**
           * 定义降级方法:
           *  1. 方法的返回值需要和原方法一样
           *  2. 方法的参数需要和原方法一样
           */
          public Goods findOne_fallback(int id){
              Goods goods = new Goods();
              goods.setTitle("降级了~~~");
      
              return goods;
          }
        
  • 在需要降级的方法上添加注解  @HystrixCommand
    • 注解中需要添加回调函数,还可以根据业务配置超时时间,保证不在不是因为逻辑代码运行超时而产生降级
    •   
       1 /**
       2      * 降级:
       3      *  1. 出现异常
       4      *  2. 服务调用超时
       5      *      * 默认1s超时
       6      *
       7      *  @HystrixCommand(fallbackMethod = "findOne_fallback")
       8      *      fallbackMethod:指定降级后调用的方法名称
       9      */
      10     @GetMapping("/findOne/{id}")
      11     @HystrixCommand(fallbackMethod = "findOne_fallback",commandProperties = {
      12             //设置Hystrix的超时时间,默认1s
      13  @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value = "3000")
      14     })
      15     public Goods findOne(@PathVariable("id") int id){
      16 
      17         //1.造个异常 
      18         int i = 3/0;
      19         try {
      20             //2. 休眠2秒     超时
      21             Thread.sleep(2000);
      22         } catch (InterruptedException e) {
      23             e.printStackTrace();
      24         }
      25         Goods goods = goodsService.findOne(id);
      26 
      27         goods.setTitle(goods.getTitle() + ":" + port);//将端口号,设置到了 商品标题上
      28         return goods;
      29     }

       

消费方降级:

由于Feign组件已经集成了Hystrix组件 所以定义Feign调用接口实现类,复写方法,即降级方法

步骤:

  • 配置中Feign开启对Hystrix的支持
    • 1 # 开启feign对hystrix的支持
      2 
      3 feign:
      4 
      5   hystrix:
      6 
      7     enabled: true
  • 定义降级方法,即创建一个类实现Feign调用的接口,重写该方法
    • 注意该方法要加注解,将其注入ioc容器  @component  
    •  1 /**
       2  * Feign 客户端的降级处理类
       3  * 1. 定义类 实现 Feign 客户端接口
       4  * 2. 使用@Component注解将该类的Bean加入SpringIOC容器
       5  */
       6 @Component
       7 public class GoodsFeignClientFallback implements GoodsFeignClient {
       8     @Override
       9     public Goods findGoodsById(int id) {
      10         Goods goods = new Goods();
      11         goods.setTitle("又被降级了~~~");
      12         return goods;
      13     }
      14 }
  • Feign的接口注解中,添加fallback属性,设置降级处理类
    • @FeignClient(value = "HYSTRIX-PROVIDER",fallback = GoodsFeignClientFallback.class) //与提供方相比,此处为字节码文件
      
      
      public interface GoodsFeignClient {
          @GetMapping("/goods/findOne/{id}")
          public Goods findGoodsById(@PathVariable("id") int id);
      
      }

 2、Hystrix 熔断

Hystrix熔断机制,用于监控微服务调用情况,当失败情况达到预定的阈值(5秒失败20次),会打开断路器,拒绝所有请求,直到服务恢复正常为止 

熔断器初始情况下是关闭的,当失败达到一定的阈值的时候(默认5s失败20次),熔断器就会打开,此时所有的请求无论是正常还是失败都会出现降级调用,熔断器开启一段时间(默认为5s),此时熔断器会是半开状态,此时会放入一个请求,如果该请求依旧失败,则将断路器状态改变为打开状态,继续上方步骤,如果调用成功,且次数达到阈值,就将断路器关闭

技术图片


这里可以对断路器进行设置

//监控时间 默认5000 毫秒
@HystrixProperty(name="circuitBreaker.sleepWindowInMilliseconds",value = "5000"),
//失败次数。默认20次
@HystrixProperty(name="circuitBreaker.requestVolumeThreshold",value = "20"),
//失败率 默认50%
@HystrixProperty(name="circuitBreaker.errorThresholdPercentage",value = "50")

 3、熔断监控

Hystrix 提供了 Hystrix-dashboard 功能,用于实时监控微服务运行状态。

但是Hystrix-dashboard只能监控一个微服务。

 Netflix 还提供了 Turbine ,进行聚合监控。

 

spring cloud 学习(Hystrix)熔断器

标签:imp   width   函数   cloud   pen   级联   frame   处理   打开   

原文地址:https://www.cnblogs.com/luckysupermarket/p/13811489.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!