Очереди сообщений: есть ли вариант использования сообщения несколькими потребителями?

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

Если мы настроим очередь, где издатель — это сервис, который получает статус знаменитости, а потребитель — отдельные подписчики. Но с миллионом подписчиков тот, кто получит это сообщение первым, увидит обновление, а другие нет? Каков общий шаблон, который можно использовать здесь, чтобы каждый из ее подписчиков увидел обновление, а не «конкурировал» друг с другом за получение сообщения первым?


person user1008636    schedule 28.04.2019    source источник
comment
Разве очереди сообщений не предназначены для случаев использования асинхронной обработки, когда издатель не знает, кто является потребителями, а также не знает, когда потребители будут обрабатывать сообщение?   -  person Andy Dufresne    schedule 29.04.2019


Ответы (1)


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

  1. Производитель-потребитель: в этом сценарии сообщение доставляется только одному потребителю, т. е. если есть несколько потребителей, они конкурируют друг с другом, чтобы получить сообщение из «очереди».

  2. Публикация-подписка: здесь издатели отправляют сообщение в «тему», а потребители подписываются на тему, чтобы получать сообщения. Потребители не конкурируют — каждый потребитель получает все сообщения после подписки.

В вашем примере это шаблон публикации-подписки в действии. Базовая реализация может быть другой, но основной шаблон — это публикация-подписка.

См.: https://stackoverflow.com/a/42477769/6886283

person priyank-sriv    schedule 29.04.2019