Роль BatchEventProcessor LMAX Disruptor Pattern

Какова роль BatchEventProcessor в шаблоне разрушителя lmax?

BatchEventProcessor<ValueEvent> eventProcessor 

= новый BatchEventProcessor (кольцевой буфер, барьер, обработчик);

EXECUTOR.execute( eventProcessor );

person BAR    schedule 29.05.2013    source источник


Ответы (2)


BatchEventProcessor — это реализация eventProcessor, которая отслеживает количество событий, доступных при каждом его вызове. Затем он делегирует фактическую обработку каждого события вашему обработчику событий и сигнализирует, когда последнее событие пакета было доставлено вашему обработчику событий.

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

person Sam Turtel Barker    schedule 23.06.2013

Если мы говорим о задаче «добавление группы событий в одно более крупное сообщение» из ответа Сэма, BatchEventProcessor делает возможным для нас две основные вещи:

  1. Мы получим «endOfBatch==true» при последнем вызове серии событий, поэтому мы можем отложить массовую публикацию сообщений до вызова с «endOfBatch==true» и не застрять в ситуации, когда нет событий для некоторых минут, и мы не отправили уже собранные один раз, и нам нужно дополнительно обработать эту ситуацию.
  2. BatchEventProcessor переместит свое собственное значение Sequence только после того, как все сообщения из пакета будут обработаны обработчиком. Это позволяет хранить предыдущие события текущего пакета в нашем обработчике и использовать их, например, для создания массового сообщения, и вы не должны думать о производителях, которые могут повредить содержимое этих повторно используемых событий. Производители не имеют доступа к этим событиям и связанным с ними последовательностям, пока обработчик не вернется из onEvent(, endOfBatch==true)
person Dmitry Spikhalskiy    schedule 05.09.2015