Hystrix是Spring Cloud提供的一种带有熔断机制的框架,就跟电路上的闸差不多。它有三种状态:关闭,开启和半开。最开始是关闭状态的,这个时候所有请求都可以通过;如果错误请求达到一定的阈值,就会变成开启状态,就会让所有请求短路,直接返回失败的响应;一段时间后,断路器会变成半开状态,如果下一个请求成功了,就关闭断路器,反之就开启断路器。
Hystrix提供了如下的几个跟circuitBreaker相关的关键参数,来对一个熔断器进行配置:
1、requestVolumeThreshold,该属性用来设置在滚动时间窗中,断路器的最小请求数。例如:默认值 20 的情况下,如果滚动时间窗(默认值 10秒)内仅收到19个请求,即使这19个请求都失败了,断路器也不会打开。
2、sleepWindowInMilliseconds,短路多久以后开始尝试是否恢复,默认5s
3、errorThresholdPercentage,出错百分比阈值,当达到此阈值后,开始短路,默认50%。
3个参数放在一起,所表达的意思就是:
每当20个请求中,有50%失败时,熔断器就会打开,此时再调用此服务,将会直接返回失败,不再调远程服务。直到5s钟之后,重新检测该触发条件,判断是否把熔断器关闭,或者继续打开。
这里面有个很关键点,达到熔断之后,那么后面它就直接不去调该微服务。那么既然不去调该微服务或者调的时候出现异常,出现这种情况首先不可能直接把错误信息传给用户,所以针对熔断我们可以考虑采取降级策略。所谓降级,就是当某个服务熔断之后,服务器将不再被调用,此时客户端可以自己准备一个本地的fallback回调,返回一个缺省值。
1、Hystrix流程分析
![edc23f5409222538c5eca1255c794c00.png](https://img-blog.csdnimg.cn/img_convert/edc23f5409222538c5eca1255c794c00.png)
上图是Hystrix流程结构图