2015-06-11 2 views
1

У меня есть команда Hystrix, которая требует очистки при истечении времени ожидания. Наш нынешний подход справиться с этим следующим образом:Команда 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(). Обратите внимание, что оригинал «do stuff», как описано в вашем методе, все еще может работать на этом этапе: Hystrix отправит исходный код run() a java.lang.Thread.interrupt(). Результаты могут отличаться.

Надеюсь, это ответ на ваш вопрос. Если вы могли бы дать больше информации в своем вопросе, я могу обновить свой ответ, чтобы включить его.

Смежные вопросы