1:工作流程图解
2:流程阐明
- 创立一个 HystrixCommand 或 HystrixObservableCommand 实例来向其它组件收回操作申请,通过构造方法来创立实例。
- 缓存判断
查看缓存内是否有对应指令的后果,如果有的话,将缓存的后果间接以 Observable 对象的模式返回
- 断路器判断
查看 Circuit Breaker 的状态。如果 Circuit Breaker 的状态为开启状态,Hystrix 将不会执行对应指令,而是间接进入失败解决状态(图中 8)。如果 Circuit Breaker 的状态为敞开状态,Hystrix 会继续执行
- 线程池、工作队列、信号量的查看
确认是否有足够的资源执行操作指令。当线程池和队列(或者是信号量,当不应用线程池隔离模式的时候)资源满的时候,Hystrix 将不会执行对应指令并且会间接进入失败解决状态
- HystrixObservableCommand.construct()和 HystrixCommand.run()
如果资源短缺,Hystrix 将会执行操作指令,调用最终都会到这两个办法:
HystrixCommand.run()或 HystrixObservableCommand.construct()。如果执行指令的工夫超时,执行线程会抛出 TimeoutException 异样。Hystrix 会摈弃后果并间接进入失败解决状态。如果执行指令胜利,Hystrix 会进行一系列的数据记录,而后返回执行的后果。
- 统计断路器的衰弱状况
Hystrix 会依据记录的数据来计算失败比率,一旦失败比率达到某一阈值将主动开启 Circuit Breaker
- 降级
如果在 Command 中实现了 HystrixCommand.getFallback()办法(或 HystrixObservableCommand. resumeWithFallback() 办法,Hystrix 会返回对应办法的后果。如果没有实现这些办法的话,依然 Hystrix 会返回一个空的 Observable 对象,并且能够通过 onError 来终止并处理错误。
调用不同的办法返回不同的后果:
execute():将会抛出异样
queue():将会返回一个 Future 对象,如果调用它的 get() 办法将会抛出异样
observe() 和 toObservable():都会返回上述的 Observable 对象
- 返回胜利
如果 Hystrix 执行胜利,返回的响应取决于在步骤 2 中调用命令。
execute():阻塞型办法,返回单个后果(或者抛出异样)
queue():异步办法,返回一个 Future 对象,能够从中取出单个后果(或者抛出异样)
observe():返回 Observable 对象
toObservable():返回 Observable 对象