Disrupror потребитель повторно отправляет данные
Я хочу использовать разрушитель LMAX, но я не уверен, что мой вариант использования подходит для него. В основном есть один или 2 производителя и n потребителей. Хитрость заключается в том, что когда потребитель получает событие и проверяет некоторые данные, он должен повторно опубликовать данные, если он не может сразу их использовать (это в основном схема опроса) . Я создаю кольцевой буфер с емкостью, которую я не волнуюсь, слишком мала, но теперь мой вопрос: безопасно ли запрашивать новые последовательности и публиковать из обработчика событий или это может как-то нарушить функциональность? Из небольшого теста, который я сделал, это кажется достаточно безопасным, но я не знаю, как оно будет вести себя в моем конкретном случае. Я обеспокоен тем, что метод onEvent может быть вызван после того, как я запросил последовательность, но прежде чем я обновлю-> опубликую новый объект, и я действительно не знаю, как обработчик прерываний обрабатывает эти случаи
1 ответ
Один из способов сделать это (не имея EventHandler
переиздавать события) будет реализовывать отдельную "переиздание" Disruptor
, Если потребительский поток обнаруживает, что он не может сразу принять событие, он записывает событие в этот буфер, и отдельные потоки затем передают эти сообщения обратно в основную очередь событий.
Это увеличит число авторов в основной очереди, но это кажется неизбежным, учитывая вариант использования. Еще одна потенциальная проблема, связанная с этим решением, заключается в том, что переизданные события должны будут использоваться после любых новых сообщений, которые были добавлены в основную очередь перед переизданием.