spring cloud hystrix使用及原理

  在微服务中,若一个服务出现故障,很容易造成依然它的服务故障,引起故障的蔓延,有可能最终导致整个系统的瘫痪。为了解决这个问题,hystrix诞生了,意在通过断路器、线程隔离等一系列服务保护,提高系统的容错能力。

1、hystrix的使用

  • 在启动类中开启hystrix

  • 指定回调失败方法

以上配置好后,hystrix断路器就可以启作用了。

2、原理分析

   我们首先看hystrix-core包下的HystrixCommand类,通过构造方法我们看到依赖这些类

  • HystrixCommandProperties 断路器对应hystrixCommand实例的属性对象
  • HystrixCommandMetrics 用来让hystrixCommand记录各类度量指标

  接着我们进入HystrixCircuitBreaker,它的实现类HystrixCircuitBreakerImpl中的属性就用到了上图的两个类。

  • isOpen():判断断路器打开或者关闭状态。如果断路器打开标识为true,则返回true,否则根据度量对象metrics获取healthCounts来判断。1、请求数在预设的范围内,则返回false,即断路器未打开,默认值为20。2、如果错误百分比在预设值范围内,则返回false,默认值为50。3、如果上面条件都不满足,则将断路器设为true,即打开状态。

  • allowRequest():判读请求是否被允许。先根据配置对象的断路器强制打开是否打开,如果是则返回false,即拒绝请求。如果断路器强制关闭是true,则允许请求,同时调用isOpen()来判断断路器打开或者关闭。3、如果都不满足,则用isOpen()来判断断路器是否打开,如果打开,这返回false,拒绝请求。

  • markSuccess():在半开状态是使用,通过调用markSuccess方法将打开的断路器关闭,并重置度量指标。

 

posted @ 2019-05-19 20:50  那叶扁舟  阅读(450)  评论(0)    收藏  举报