Можно ли обработчику хвоста SingleChronicleQueue добавить другое сообщение в ту же очередь?

У меня есть 1 SingleChronicleQueue, к которому добавлены разные сообщения через прокси-API methodWriter.

Мой обработчик чтения обрабатывает «сообщение1» и добавляет обратно другое сообщение «сообщение2», чтобы тот же обработчик обрабатывал его другим методом (сообщение2()).

Flow is:
    Append: proxy appends message1 to Q
    Tailer: handler1 reads message1 and 
            appends using proxy message2 to same Q
    Tailer: handler1 reads message2

OK?

Или трейнеры всегда должны писать в другую очередь «Исходящие», а она должна находиться между ними?

Причина такого подхода к управлению неблокирующим доступом к общему состоянию.


person JARC    schedule 09.11.2018    source источник


Ответы (1)


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

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

ПРИМЕЧАНИЕ. При использовании одной очереди хвостовик увидит все сообщения, даже те, которые были написаны тредом, использующим хвостовик.

person Peter Lawrey    schedule 09.11.2018
comment
Хорошо, отлично, это был именно тот ответ, который я хотел услышать. Мои модульные тесты по этому сценарию работают, но они казались такими простыми, что я хотел перепроверить, не упустил ли где-то смысл. Спасибо. - person JARC; 09.11.2018
comment
просто для ясности мы используем аппендеры, а не трейлеры для написания сообщений. Мы имеем в виду, что хвостовик увидит все сообщения, даже сообщения, записанные в эту очередь этим потоком. - person Rob Austin; 09.11.2018
comment
Конечно, поэтому класс менеджера, реализующий onListeners, созданный из queue.methodReader(), обрабатывает сообщения из очереди, а затем может записывать новые сообщения в ту же очередь из Listener, созданного из queue.methodWriter(), который является конструктором, введенным в тот же менеджер. . - person JARC; 12.11.2018
comment
@JARC правильно. Вы можете написать обратно в ту же очередь. - person Peter Lawrey; 12.11.2018