Я хотел бы сделать магию маршрутизации с AMQP. Моя настройка - Python с Pika на стороне потребителя/производителя и RabbitMQ для сервера AMQP.
Что я хотел бы достичь:
потребляют такие сообщения:
один набор подписчиков должен просто получить все сообщения.
Сложная часть состоит в том, что если любой сервер второго набора получил сообщение, ни один другой сервер из второго набора не получит его. Все серверы из первого набора должны по-прежнему использовать это сообщение.
Возможно ли это с помощью одного вызова basic_publish
или мне нужно отправить сообщение на обмен маршрутизации (для первого набора потребителей) и на "глобальный" обмен для второго набора потребителей?
УТОЧНЕНИЕ:
То, что я хотел бы достичь, - это сингл позвонить, чтобы опубликовать сообщение и получить его полученных двумя различными наборами потребителей.
Случай 1. Просто получайте сообщения на основе ключа маршрутизации (это сообщение с ключом маршрутизации
foo
будет полученных всеми потребителями в настоящее время интересуется этой темой)Случай 2. Это в основном напоминает RabbitMQ Tutorial for Worker Очереди. Существует ряд работников, которые будут получать сообщения, отправленные в круговым способом. Только один работник получит сообщение
Тем не менее сообщение, полученное потребителями, которые заинтересованы в определенной ключ маршрутизации должен быть точно таким же, как сообщения, полученные рабочими, произведенные одним вызовом API.
(Надеюсь, мой вопрос имеет смысл, я не слишком знаком с условиями AMQP)
Для начала вам нужно использовать обмен topic
и публиковать свои сообщения с другим ключом маршрутизации для каждой очереди. Магия происходит, когда потребитель связывает очередь с ключом привязки (или шаблон, который нужно сопоставить). Некоторые потребители просто используют ключи маршрутизации в качестве ключа привязки. Но второй набор будет использовать шаблон подстановки для своего ключа привязки.
Для Case 1 вам необходимо создать очередь для каждого потребителя и связать каждую очередь с соответствующим ключом маршрутизации.
Для Case 2 просто создайте одну очередь с ключом маршрутизации #
и попросите каждого из ваших рабочих потребителей использовать это. Брокер отправит в рабочий класс round- ролик.
Вот скриншот того, как он будет выглядеть в RabbitMQ. В этом примере есть два пользователя из вашего "случая 1" (Foo и Bar) и одна очередь для всех рабочих, чтобы удовлетворить "случай 2".
Эта модель должна поддерживаться всеми AMQP- совместимыми брокерами и не потребует каких-либо специальных улучшений vendor-.