我有一个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框架是否为此提供了另一种方式?
答案 0 :(得分:1)
据我所知,如果发生超时,您无法在run()
方法内可靠地确定:run()
方法在调用者等待时在分离的线程中运行。如果您在检查超时时检查run()
方法,则调用线程可能会超时,您将无法了解它。您建议的代码大部分时间都可以使用,但每次调用都有一个小的时间窗口,它不起作用。
检查是否发生超时的保存位置是fallback()
方法。请注意原作&#34;做东西&#34;如您的方法中所述,此时可能仍在运行:Hystrix将发送原始run()
方法java.lang.Thread.interrupt()
。取决于你的&#34;做什么&#34;结果可能会有所不同。
我希望这是你问题的答案。如果您可以在问题中提供更多信息,我可以更新我的答案以包含它。