Как транслировать ВСЕМ абонентам с одинаковым именем очереди / ключом маршрутизации на прямой обмен - PullRequest
0 голосов
/ 30 июня 2010

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

Теперь рассмотрим требование, чтобы иметь возможность отправлять сообщения ВСЕМ подписчикам на этом уровне, не зная, сколько их (например, административное сообщение «сбросьте ваше состояние» или «завершите работу, пожалуйста») Есть ли способ сделать это в rabbitmq? Если это невозможно, есть ли лучший подход?

Моя среда Python, использующая amqplib.

1 Ответ

2 голосов
/ 01 июля 2010

Если я правильно понимаю, это ваша установка:

  • у вас есть продюсер, публикующий прямой обмен;
  • у вас есть очередь, привязанная к этому обмену;
  • у вас много подписчиков, все из которых используют данные из указанной выше очереди.

Это прекрасно работает для отправки сообщения произвольному подписчику (таким образом, сортировка нагрузки), но вы хотите иметь возможность отправлять некоторые сообщения ВСЕМ подписчикам.

Вы можете сделать это с обменом разветвлениями и дополнительной очередью для каждого подписчика:

  • ваш производитель публикует общесистемные сообщения для обмена фанатами;
  • есть очередь для каждого подписчика, привязанного к этому обмену;
  • каждый подписчик сначала пытается использовать из этой очереди; если это не удается, он пытается использовать из общей очереди, которую вы используете в настоящее время.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...