超时时需要清理的 Hystrix 命令

Posted

技术标签:

【中文标题】超时时需要清理的 Hystrix 命令【英文标题】:Hystrix command requiring cleanup when timed-out 【发布时间】:2015-08-27 00:44:33 【问题描述】:

我有一个 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 框架是否为此提供了另一种方式?

【问题讨论】:

有人有建议吗? 【参考方案1】:

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

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

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

【讨论】:

以上是关于超时时需要清理的 Hystrix 命令的主要内容,如果未能解决你的问题,请参考以下文章

Hystrix 构建高可用微服务

Hystrix 超时配置的N种玩法

Hystrix 超时配置的N种玩法

使用spring boot多次超时时禁用redis

springcloud费话之断路器(hystrix in feign)

如何在会话超时时关闭所有活动的引导模式?