Маршрутизация сообщений в AMQP - PullRequest
1 голос
/ 08 июня 2011

Я бы хотел сделать магию маршрутизации с AMQP. Моя установка - это Python с Pika на стороне потребителя / производителя и RabbitMQ для сервера AMQP.

Чего бы я хотел достичь:

  1. отправить сообщение на единый обмен
  2. (введите магию здесь)
  3. принимать сообщения примерно так:

    • один набор подписчиков должен быть в состоянии извлечь на основе ключа маршрутизации
    • один набор подписчиков должен просто получать все сообщения.

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

Возможно ли это с помощью одного basic_publish вызова, или мне нужно отправить сообщение в маршрутный обмен (для первого набора потребителей) и в «глобальный» обмен для второго набора потребителей?

РАЗЪЯСНЕНИЯ:

То, что я хотел бы достичь, это один позвоните, чтобы опубликовать сообщение и получить его получены 2 различными наборами потребители.

Случай 1 : просто получать сообщения на основе ключа маршрутизации (то есть сообщение с ключом маршрутизации foo будет получено всеми потребителями в данный момент интересуюсь этой темой)

Случай 2 : Это в основном похоже на RabbitMQ Tutorial for Worker Очереди . Есть ряд работников, которые будет получать сообщения, отправленные в круговой путь Только один работник получит сообщение

Тем не менее сообщение, которое получают потребители, которые заинтересованы в определенной Ключ маршрутизации должен быть точно таким же, как и сообщения, полученные рабочими, произведенными одним вызовом API.

(надеюсь, мой вопрос имеет смысл, я не слишком знаком с терминами AMQP)

1 Ответ

1 голос
/ 10 июня 2011

Для начала вам нужно использовать topic обмен и публиковать ваши сообщения с разными ключами маршрутизации для каждой очереди. Волшебство происходит, когда потребитель связывает очередь с помощью связывающего ключа (или шаблона для сопоставления). Некоторые потребители просто используют ключи маршрутизации в качестве связующего ключа. Но второй набор будет использовать шаблон подстановки для своего связующего ключа.

Для Случай 1 необходимо создать очередь для каждого потребителя и связать каждую очередь соответствующим ключом маршрутизации.

Для Случай 2 , просто создайте одну очередь с ключом маршрутизации # и пусть каждый из ваших рабочих-потребителей потребляет из этого. Брокер отправит рабочим круговым способом.

Вот скриншот того, как это будет выглядеть в RabbitMQ. В этом примере есть два потребителя из вашего «дела 1» (Foo и Bar) и одна очередь для всех работников, чтобы удовлетворить «дело 2».

enter image description here

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

...