象牙酥 Missing My Rainbow

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;

 

posted @ 2021-04-11 23:21  象牙酥  阅读(153)  评论(0编辑  收藏  举报