zoukankan      html  css  js  c++  java
  • hystrix(4) 异常降级

      当执行HystrixCommand时,如果发生命令执行异常、熔断器熔断、信号量超过数量,就会执行降级fallback方法,并返回结果。本质上,当出现以上情况是,执行fallback方法,而不是run方法。

    private Observable<R> applyHystrixSemantics(final AbstractCommand<R> _cmd) {
            if (circuitBreaker.allowRequest()) {
    ...
                if (executionSemaphore.tryAcquire()) {
                    try {
    ...
                        return executeCommandAndObserve(_cmd)//执行run方法,如果异常,执行fallback方法
                                .doOnError(markExceptionThrown)
                                .doOnTerminate(singleSemaphoreRelease)
                                .doOnUnsubscribe(singleSemaphoreRelease);
                    } catch (RuntimeException e) {
                        return Observable.error(e);
                    }
                } else {
                    return handleSemaphoreRejectionViaFallback();//执行fallback方法,并返回响应Observable
                }
            } else {
                return handleShortCircuitViaFallback();//执行fallback方法,并返回响应Observable
            }
        }

      executeCommandAndObserve

     private Observable<R> executeCommandAndObserve(final AbstractCommand<R> _cmd) {
    ...
            Observable<R> execution;
            if (properties.executionTimeoutEnabled().get()) {
                execution = executeCommandWithSpecifiedIsolation(_cmd)//执行run方法。
                        .lift(new HystrixObservableTimeoutOperator<R>(_cmd));
            } else {
                execution = executeCommandWithSpecifiedIsolation(_cmd);
            }
            return execution.doOnNext(markEmits)
                    .doOnCompleted(markOnCompleted)
                    .onErrorResumeNext(handleFallback)//如果执行异常,则执行fallback方法。
                    .doOnEach(setRequestContext);
        }
  • 相关阅读:
    Java的一天学习
    IIS7配置PHP图解
    主流HTML5游戏框架的分析和对比
    HTTP请求
    hibernate -- 数据库连接池的失效检查设置
    mysql备份
    深入探索SOAP1.1--使用SAAJ1.2.1
    JDBC连接执行MySQL存储过程报权限错误
    mysql(connector/ODBC)
    mysql查询优化(三)
  • 原文地址:https://www.cnblogs.com/zhangwanhua/p/8241716.html
Copyright © 2011-2022 走看看