标签:res 缓存命中 bre back 异常 nbsp cal pen 工作流程
在分布式环境中,一个服务可能会依赖很多其他的服务,并且这些服务都不可避免地有失效的可能。Hystrix通过隔离服务之间的访问点,阻止它们之间的级联故障以及提供回退选项以提高系统的整体可靠性。
创建代码如下
HystrixCommand command = new HystrixCommand(arg1, arg2);
HystrixObservableCommand command = new HystrixObservableCommand(arg1, arg2);
.
共有4种执行命令的方法,前2种只支持HystrixCommand ,后2种只支持HystrixObservableCommand
HystrixCommand.execute(): 实际调用queue()的方法
public R execute() {
return queue().get();
}
HystrixCommand.queue(): 实际调用toObservable()的方法
public Future<R> queue() {
final Future<R> delegate = toObservable().toBlocking().toFuture();
....
}
HystrixObservableCommand.observe():实际调用toObservable()的方法
public Observable<R> observe() {
....
final Subscription sourceSubscription = toObservable().subscribe(subject);
....
通过以上的代码,我们可以知道:第1种是同步阻塞性调用,第2种是异步非阻塞性调用,第3、4种是基于发布-订阅响应式的调用。虽然是4种调用方式,其实际最后都是基于toObservable方法来实现的
如果请求缓存功能开启,并且请求在缓存命中,那么返回一个Observable,此对象包含请求的结束
在执行命令时,Hystrix 如果发现断路器跳闸,那么hystix会跳到步骤8去执行回退(fallback)逻辑。如果断路器没有跳闸,则继续执行步骤5
关于断路器打开和关闭的条件见本文的下方。
如果命令关联的线程池和队列(或信号量)满了,则不会执行命令,会跳到步骤8去执行回退(fallback)逻辑
执行HystrixCommand.run()或HystrixObservableCommand.construct()时,如果执行超时或者执行失败,则执行会跳到步骤8去执行回退(fallback)逻辑;如果正常结束,Hystrix 会记录一些日志和监控数据,并返回处理结果
Hystrix向断路器报告成功、失败、拒绝和超时。断路器维护一组计数器来统计执行数据。
当发生如下情况时,Hystrix会尝试执行回退(fallback)逻辑:
编写回退(fallback)逻辑时,这个逻辑里最好没有网络调用,只从内存中获取或者只有静态的逻辑,这个逻辑保证不会执行失败。如果非要通过网络去获取Fallback,你需要在使用其他HystrixCommand或HystrixObservableCommand封装请求,并且这个请求必须有fallback逻辑且值没有网络调用,只有静态逻辑
返回执行结束或者Observable
下图显示HystrixCommand或HystrixObservableCommand如何与HystrixCircuitBreaker及其逻辑和决策流程交互,包括计数器在断路器中的行为。
断路器开启关闭的规则如下:
标签:res 缓存命中 bre back 异常 nbsp cal pen 工作流程
原文地址:https://www.cnblogs.com/duan2/p/9292010.html