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



