В любом случае потребители сообщают производителю, что какое-либо конкретное событие успешно обработано?
В разрушителе LMAX: как производитель узнает, что потребитель закончил работу
Ответы (3)
Не напрямую нет, и, учитывая, что разрушитель предназначен для развязки обработки, это сведет на нет весь прирост производительности, который он обеспечивает.
Вы можете подключить это, если хотите. Что-то типа
class MyEvent {
String payload;
Runnable onComplete;
}
Затем запустите обработчик событий/потребитель/что угодно onComplete после того, как он обработает полезную нагрузку. Замените runnable на Future или что-то другое, что вам может понравиться, но этот шаблон лучше всего работает для асинхронных вещей (может быть, runnable устанавливает флаг готовности в вашем пользовательском интерфейсе?)
Disruptor, как правило, плохо подходит для вещей, когда вызывающему абоненту нужно заблокировать результат.
не могли бы вы просто поддерживать счетчики у вашего производителя (ов) и потребителя (ей), счетчик приращения производителя (ов) перед публикацией, счетчик приращения потребителя (ов) после обработки, а затем заставить производителя сравнить produced_count
с consumed_count
?