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);
    }

 

转载于:https://www.cnblogs.com/zhangwanhua/p/8241716.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值