2012-02-27 4 views
1

Для разработчиков/пользователей LMAX Disruptor http://code.google.com/p/disruptor/:Как применить функцию тайм-аута к очереди LMAX Disruptor Queue?

Мой вопрос: Может кто-нибудь предложить подход к тому, как применять функцию тайм-аут, чтобы Disruptor например используя EventHandler?

Вот один сценарий, который возник в моей работе:

  1. Исходящие - сообщения, отправляемые на сервер по сети
  2. Входящие - ACK-сообщения, полученные от сервера
  3. ACK Handler - знаки отпр сообщения как ACKed
  4. Timeout Handler - отмечает отпр сообщения, как голые (очень нужно, но где он может вписаться в дизайн Disruptor?)

Есть ли у кого-то такое же мнение? Или кто-нибудь может указать, почему это не нужно. Надеюсь, что последующие дебаты будут краткими.

спасибо.

ответ

0

Чтобы уточнить, что обработчик тайм-аута «срабатывал» через определенный промежуток времени, когда сообщение не могло быть доставлено?

Способ работы с разрывом заключается в том, что у вас есть ringbuffer для входящего и ringbuffer для исходящих сообщений ... поэтому приходит сообщение электронной почты и помещает его в буфер входящего звонка с помощью соответствующего события. затем обработайте сообщение (например, декодирование, анализ, журнал, хранилище) и отправьте его в другую систему, поместив его в исходящий ringbuffer ... другой обработчик принимает сообщение и сохраняет его в базе данных или отправляет на другой сервер с помощью smtp ... если возникает ошибка/время ожидания и т. д., вы создаете событие во входящем кольцевом буфере, сигнализируя об ошибке (NACK) и обрабатывая это сообщение. Имеет ли это смысл?!?

+0

Да, тайм-аут EventHandler, который вызывается, когда какие-либо объекты остаются слишком длинными в ringbuffer. Проблема в том, что я не вижу, как EventHandler можно реализовать и зарегистрировать в RingBuffer/Distruptor для поддержки тайм-аутов. Единственное решение, которое я могу решить, это настроить собственный EventProcessor. –

+0

Извините за то, что не ответил soooo long. Вам придется переиздать его определенное количество раз, то есть количество попыток отправки электронной почты ... или до истечения времени t ... так что поток всегда возвращается к нему. –

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