spring cloud Hystrix的工作流程简单介绍
首先上流程图(网上找的流程图)
- 创建HystrixCommand或者HystrixObservableCommand对象。用来表示对以来服务的请求操作。从命名就能看的出来,使用的是命令模式,其中HystrixCommand返回的是单个操作结果,HystrixObservableCommand返回多个结果
- 命令执行。共有4中方法执行命令。
- execute():用户执行,从依赖的服务里返回单个结果或抛出异常
- queue():异步执行,直接返回一个Future对象
- observe():放回observable对象,代表了多个结果,是一个Hot Observable
- toObservable():返回Observable对象,但是是一个 Cold Observable
Hystrix大量的使用了RxJava,想更容易的理解Hystrix的,请自行百度RxJava进行阅读。
- 结果是否被缓存。如果已经启用了缓存功能,且被命中,那么缓存就会直接以Observable对象返回
- 断路器是否已打开。没有命中缓存,在执行命令前会检查断路器是否已打开。
- 断路器已打开,直接执行fallback
- 断路器关闭,继续往下执行
- 线程池And信号量Or请求队列是否已被占满 如果与该命令有关的线程池和请求队列,或者信号量已经被占满,就直接执行fallback
- 执行HystrixObservableCommand.construct () 或 HystrixCommand.run() 方法。如果设置了当前执行时间超过了设置的timeout,则当前处理线程会抛出一个TimeoutyException,如果命令不在自身线程里执行,就会通过单独的计时线程来抛出异常,Hystrix会直接执行fallback逻辑,并忽略run或construct的返回值。
- 计算断路器的健康值。
- fallback处理。
- 返回成功的响应。
Hystrix的执行流程就是这样,当然还有很多细节没有写出来。想要了解的可自行debug。
Hystrix的原理简单分析