2013-12-05 5 views
1

У нас есть система, использующая инфраструктуру Disruptor, у нее есть пять зарегистрированных этапов, реализующих EvenetHandler.LMAX Disruptor Timeout EventHandler

Этапы работают в последовательности, поэтому запрос может перейти только на второй этап, когда завершается первый этап, это перемещение поддерживается внутренним устройством Disruptor.

У нас есть проблема с третьим этапом, это узкое место, которое занимает много времени, поскольку оно вызывает различные HTTP-вызовы и сохраняет ответ в объекте запроса.

Итак, мы хотим переместить запрос (с любым ответом) вперед с четвертым и пятым этапами через некоторое время, проведенное на третьем этапе.

Как я могу набрать какой-либо определенный этап (в данном случае Третий этап) и принудительно переместить запрос на следующий этап?

Или

Есть ли способ, чтобы зарегистрировать какое-то событие, которое получает срабатывает после некоторого определенного тайм-аута, то это может быть что-то вроде тайм-аута системного уровня?

ответ

1

Раствор мы пытались это

  1. есть поток обнаружения зависания, который отслеживает последовательности, обработанные на стадии (или все этапы). Имейте информацию о времени в самом Процессе событий.
  2. Время ожидания прерывает поток обработчика событий. Который должен заставить процессор событий выйти из вращения, которое он делает. Итак, здесь мы потеряли нить (или один из потоков), обрабатывающий этап
  3. Замените поток обработчика событий.

Решения необходимо писать собственный процессор событий, который прерывает известно и положение, чтобы добавить этапы событий динамически в нарушающие

+0

Спасибо, я попробую решение. –

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