Hystrix工作流程【转】
原文链接:https://blog.csdn.net/yangguosb/article/details/80820766
工作流程
工作流程主要分为三部分:调用请求封装成HystrixCommand、执行请求调用第三方服务和调用结果处理,如下图所示:
命令执行
执行方式
- execute() — 同步调用,阻塞等待直至返回结果或者抛出异常;
- queue() — 返回Future;
- observe() — 返回Observable,立即执行,通过subscribe获取结果,相当于异步回调;
- toObservable() — 返回Observable,延迟执行,当调用subscribe时命令才被执行;
执行过程
Step1:响应是否被缓存
如果请求对应的结果已经被缓存,则直接返回结果;否则,执行下一步;
Step2:熔断器是否被打开
如果熔断器被打开,说明请求链路被熔断,无法调用第三方请求;否则,执行下一步。
Step3:资源是否耗尽
- 线程隔离:查看线程是否耗尽或者队列是否可用;
- Semaphore隔离:查看是否有信号量可用;
Step4:调用第三方服务
- HystrixCommand.run() — returns a single response or throws an exception;
- HystrixObservableCommand.construct() — returns an Observable that emits the response(s) or sends an onError notification
调用结果处理
Step1:健康度计算
熔断器根据调用结果(成功、失败、超时或异常等)计算健康度,以便决定是否进行熔断;
Step2:执行getFallback
如果有服务降级逻辑,可以重写次方法实现。
Step3:返回响应
参考:
官网说明:https://github.com/Netflix/Hystrix/wiki/How-it-Works#flow1;