一文看懂Hystrix超时机制

Hystrix超时入口是在 AbstractCommand 类中,如图:

Observable execution;
        if (properties.executionTimeoutEnabled().get()) {
            execution = executeCommandWithSpecifiedIsolation(_cmd)
                    .lift(new HystrixObservableTimeoutOperator(_cmd));
        } else {
            execution = executeCommandWithSpecifiedIsolation(_cmd);
        }
复制代码

当我们的代码执行的时候会回调HystrixObservableTimeoutOperator.call()方法,超时的逻辑主要在这个方法中。

第一步: TimerListener listener = new TimerListener() 创建了一个监听器,很明显这个监听器就是来监听我们的command是否超时的,那它是怎么判断我们的任务是否超时了呢?我们看他的 tick() 方法。

if(originalCommand.isCommandTimedOut.compareAndSet(TimedOutStatus.NOT_EXECUTED, TimedOutStatus.TIMED_OUT)) {
                        // report timeout failure
                        originalCommand.eventNotifier.markEvent(HystrixEventType.TIMEOUT, originalCommand.commandKey);

            

你可能感兴趣的:(Java,编程,程序员,hystrix,java,开发语言)