【Hystrix工作流程】

 

 

1.创建对象HystrixCommand用在依赖的服务返回单个操作结果的时候
HystrixObservableCommand用在依赖的服务返回多个操作结果的时候
2.命令执行HystrixCommandexecute()同步执行,从依赖的服务返回一个单一的结果对象,或是在发生错误的时候抛出异常。
queue()异步执行,直接返回一个Future对象。其中包含了服务执行结果时要返回的单一对象。
HystrixObservableCommandobserve()返回Observable对象,它代表了操作的多个结果,它是一个Hot Observable(不论“事件源”是否有“订阅者”都会在创建后对事件进行发布,所以对于Hot Observable的每一个“订阅者”都有可能是从“事件源”的中途开始的,并可能只是看到了整个操作的局部过程)。
toObservable()同样会返回Observable对象,也代表了操作的多个结果,但是它返回的是一个Cold Observable(没有“订阅者”的时候并不会发布事件,而是进行等待,直到有“订阅者”之后才发布事件,所以对于Cold Observable的订阅者,它可以保证从一开始看到整个操作的全部过程)。
3.若当前命令的请求缓存功能是被启用的,并且该命令在缓存中,那么缓存的结果会立即以Observable对象的形式返回。
4.检查断路器是否为打开状态,如果断路器是打开的,那么Hystrix不会执行命令,而是转接到fallback处理逻辑(第8步);如果断路器是关闭的,检查是否有可用资源来执行命令(第5步)
5.线程池/请求队列/信号量是否占满。如果命令依赖服务的专有线程池和请求队列,或者信号量(不使用线程池的时候)已经被占满,那么Hystrix也不会执行命令,而是转接到fallback处理逻辑(第8步)
6.Hystrix会根据我们编写的方法来决定采取什么样的方式去请求依赖服务。HystrixCommandrun()返回一个单一的结果,或者抛出异常。
HystrixObservableCommandconstruct()返回一个Observable对象来发送多个结果,或通过onError发送错误通知
7.Hystrix会将“成功”、“失败”、“拒绝”、“超时”等信息报告给断路器,而断路器会维护一组计数器来统计这些数据。
断路器会使用这些统计数据来决定是否要将断路器打开,来对某个依赖服务的请求进行“熔断/短路”。
8.当命令执行失败的时候,Hystrix会进入fallback尝试回退处理,我们通常也称该操作为“服务降级”。
而能够引起服务降级处理的情况有下面几种:
第4步:当前命令处于“熔断/短路”状态,断路器是打开的时候。
第5步:当前命令的线程池、请求队列或者信号量被占满的时候。
第6步:HystrixObservableCommand.construce()或HystrixCommand.run()抛出异常的时候。
9.当Hystrix命令执行成功之后,它会将处理结果直接返回或以Observable的形式返回
tips:如果我们没有为命令实现降级逻辑或者在降级处理逻辑中抛出了异常,Hystrix依然会返回一个Observable对象,但是它不会发送 任何结果数据,而是通过onError方法通知命令立即中断请求,并通过onError方法将引起命令失败的异常发送给调用者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值