zoukankan      html  css  js  c++  java
  • 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;

  • 相关阅读:
    Jessica's Reading Problem POJ
    FatMouse and Cheese HDU
    How many ways HDU
    Humble Numbers HDU
    Doing Homework again
    Stacks of Flapjacks UVA
    Party Games UVA
    24. 两两交换链表中的节点
    面试题 03.04. 化栈为队
    999. 可以被一步捕获的棋子数
  • 原文地址:https://www.cnblogs.com/suhaha/p/14646111.html
Copyright © 2011-2022 走看看