В разрушителе LMAX: как производитель узнает, что потребитель закончил работу

В любом случае потребители сообщают производителю, что какое-либо конкретное событие успешно обработано?


person user2307172    schedule 18.04.2014    source источник


Ответы (3)


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

person Sam Turtel Barker    schedule 06.05.2014

Вы можете подключить это, если хотите. Что-то типа

class MyEvent {
  String payload;
  Runnable onComplete;
}

Затем запустите обработчик событий/потребитель/что угодно onComplete после того, как он обработает полезную нагрузку. Замените runnable на Future или что-то другое, что вам может понравиться, но этот шаблон лучше всего работает для асинхронных вещей (может быть, runnable устанавливает флаг готовности в вашем пользовательском интерфейсе?)

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

person Darren Gilroy    schedule 07.05.2014

не могли бы вы просто поддерживать счетчики у вашего производителя (ов) и потребителя (ей), счетчик приращения производителя (ов) перед публикацией, счетчик приращения потребителя (ов) после обработки, а затем заставить производителя сравнить produced_count с consumed_count?

person Alex Averbuch    schedule 03.01.2015