1

我有一个 Hystrix 命令,在超时时需要清理。我们目前处理这个问题的方法如下:

public class MyCommand extends HystrixCommand<MyResponse> {

    @Override
    public MyResponse run() {
        // do stuff

        // Cleanup if timed out
        if( this.isResponseTimedOut() ) {
           // perform cleanup
        }

        return myresponse;
    }
}

Hystrix 框架是否为此提供了另一种方式?

4

1 回答 1

1

run()据我所知,如果发生超时,您无法在方法内部可靠地确定:该run()方法在调用者等待时在单独的线程中运行。如果发生超时,则在检查run()方法时,调用线程可能会超时,而您将不知道。您建议的代码大部分时间都可以工作,但每次调用都有一个小的时间窗口,它不会工作。

检查是否发生超时的保存位置将是该fallback()方法。请注意,您的方法中描述的原始“do stuff”此时可能仍在运行:Hystrix 将发送原始run()方法 a java.lang.Thread.interrupt(). 根据您的“做事”,结果可能会有所不同。

我希望这是您问题的答案。如果您可以在问题中提供更多信息,我可以更新我的答案以包含它。

于 2015-06-13T21:22:05.413 回答