参考链接:SpringCloud的Hystrix(五) Hystrix机制
1、在线测试
根据定义,生成输入界面,
点击测试,
验证参数,发起调用,返回执行结果
2、熔断保护
两个实现类:
NoOpCircuitBreakerImpl,什么也不做的断路器实现
HystrixCircuitBreakerImpl,实现类:
HystrixCircuitBreakerImpl
- HystrixCommandProperties properties
- HystrixCommandMetrics metrics
- AtomicBoolean circuitOpen
- AtomicLong circuitOpenedOrLastTestedTime:断路器打开或是上一次测试时间戳
HystrixCircuitBreakerImpl的方法
isOpen 判断断路器的打开/关闭状态
如果打开,直接返回true,表示断路器处于打开状态。否则,从度量指标metrics中获取healthcounts统计对象进一步判断(该对象记录了一个滚动时间窗内的请求信息快照,默认时间窗为10秒)
如果请求总数qps在预设的阈值范围内就返回false,表示断路器处于未打开状态,默认值20
如果错误百分比在阈值范围内就返回false,表示断路器处于未打开状态,默认值50
如果上述两个条件都不满足,就将断路器设置为打开状态(熔断/短路)。同时,如果从关闭状态切换到打开状态的话,就将时间记录到circuitOpenedOrLastTestedTime中。
allowRequest 判断请求是否被允许
判断是否强行打开,是则 return false
判断是否强行关闭,是则 isOpen & return true
!isOpen()||allowSingleTest()::断开时的时间戳+配置中的circuitBreakerSleepWindowInMillseconds 是否 小于当前时间,如果是的话,就将当前时间更新到记录断路器打开的时间circuitBreakerOpenedOrLastTestedTime中,并允许该请求。
即设置了断路器打开后的休眠时间(默认为5秒),休眠时间达到之后,将再次允许请求尝试访问,此时断路器处于“”半开“”,
若此时请求继续失败,则断路器又进入打开状态,并等待下一个休眠窗口过去之后再尝试。
若请求成功, 则将断路器重新置于关闭状态。
所以,allowSingleTest()和isOpen()配合,实现了断路器的打开和关闭状态的切换。
markSuccess 用来关闭断路器 在“半开”状态时使用。若调用命令成功,通过调用它将打开的断路器关闭,并重置度量指标对象。
命令执行的四个结果:成功、失败、超时、拒绝,用来更新计时器