Akka Event Bus: найти неиспользованные события в канале?

Если актор запускается и подписывается на канал в шине событий Akka, есть ли способ для актора использовать события, которые уже были отправлены на канал, но не использованы каким-либо другим актером?

Другими словами, я хочу, чтобы актер «собирал почту». Может быть, Event Bus не подходит для этого, я не знаю.


person James McCabe    schedule 16.02.2014    source источник


Ответы (1)


Если на канал нет подписки, сообщения отправляются на канал DeadLetter. Теоретически вы можете написать собственный актор и подписаться на поток событий Deadletter (взгляните на актор логгера для DeadLetter), чтобы отслеживать все неиспользованные сообщения. Вы можете иметь ограниченную по размеру очередь («почтовый ящик последних n сообщений») в актере для каждого канала и заставить его слушать пользовательский канал «почта». Очередь почтового ящика также может быть основана на внешнем сохранении (redis, rdbs и т. д.). Каждый новый подписчик вашего канала должен проверять «почтовый» канал и потреблять все сообщения из очереди определенной темы в почтовом актере, если таковые имеются. Это эмулирует обычную очередь сообщений на любом брокере, поддерживающем сохраняемость.

person Ion Cojocaru    schedule 19.02.2014
comment
Интересное решение, но оно кажется мне слишком большим, как будто я превращаю шину событий во что-то, для чего она не предназначена. Возможно, мне следует использовать какую-то обычную очередь сообщений, но я бы предпочел не опрашивать ее, и я опасаюсь добавлять еще одну зависимость в свой проект из-за медленной сборки. - person James McCabe; 20.02.2014
comment
Если я правильно понял, в непрерывном опросе нет необходимости, только когда новый актор подписывается, он проверяет почту, поэтому очередь почтового ящика очищается и не будет снова заполняться, если нет подписанного актера и сообщения снова отправляются в Deadletter. - person Ion Cojocaru; 23.02.2014
comment
Это решение, хотя я надеялся на что-то более простое и встроенное. - person James McCabe; 26.02.2014