hystrix总结之命令执行

Posted zhangwanhua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hystrix总结之命令执行相关的知识,希望对你有一定的参考价值。

  HystrixCommand有四种执行方法:

  execute方法使用同步方式获取结果,本质是调用了queue方法获取了一个Future,然后通过该Future获取返回结果。

public R execute() {
        try {
            return queue().get();
        } catch (Exception e) {
            throw Exceptions.sneakyThrow(decomposeException(e));
        }
    }

  queue方法通过异步方式活动结果,本质是通过toObservable方法获取了一个Observable,然后通过该Observable获得一个Future

public Future<R> queue() {
      ...
        final Future<R> delegate = toObservable().toBlocking().toFuture();
     ...    
};

  observe方法通过Observable实现异步,并且该Observable无论在任何时候监听,都可以接收到所有消息。本质是使用了一个ReplaySubject监听toObservable返回的Observable,然后再返回该ReplaySubject。

public Observable<R> observe() {
       ...
        final Subscription sourceSubscription = toObservable().subscribe(subject);
       ...
        return subject.doOnUnsubscribe(new Action0() {
            @Override
            public void call() {
                sourceSubscription.unsubscribe();
            }
        });
    }

  toObservable方法Observable实现异步,在Observable被监听时执行。本质是创建一个Observable,当这个Observable被监听时,执行run命令,并返回消息。

public Observable<R> toObservable() {
       ...
        return Observable.defer(new Func0<Observable<R>>() {
            @Override
            public Observable<R> call() {
               ...
                Observable<R> hystrixObservable =
                        Observable.defer(applyHystrixSemantics)  //会调用run方法
                                .map(wrapWithAllOnNextHooks);
               ...
            }
        });
    }

 

以上是关于hystrix总结之命令执行的主要内容,如果未能解决你的问题,请参考以下文章

hystrix总结之异常降级

hystrix熔断器之HystrixCommandExecutionHook

8.Spring-Cloud-Hystrix之异常处理

hystrix源码小贴士之命令四种调用方式的异同

hystrix总结之缓存

SpringCloud 学习笔记总结