Маршрутизация сообщений в AMQP

1

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

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

  • отправить сообщение на один обмен
  • (введите здесь магию)
  • потребляют такие сообщения:

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

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

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

УТОЧНЕНИЕ:

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

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

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

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

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

  • 0
    Просто к вашему сведению, я нашел ваши вопросы очень запутанными, и я очень хорошо знаком с AMQP. Главным образом часть потребления сообщений.
  • 0
    Это можно сделать с помощью QPID (реализация Apache AMQP) с использованием федерации. Но, к сожалению, федерация не является частью спецификации ... и я не уверен, существует ли подобная функциональность в RabbitMQ ..
Показать ещё 1 комментарий
Теги:
rabbitmq
amqp
pika

1 ответ

1
Лучший ответ

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

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

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

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

Изображение 174551

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

  • 0
    Хорошо, поэтому я не могу опубликовать только один раз, и оба случая покрыты?
  • 0
    Да, ты можешь. Почему ты думаешь, что не можешь? Это же сообщение будет отправлено в любую очередь с соответствующей схемой ключа маршрутизации. Если оно соответствует 2 очередям, одно и то же сообщение в конечном итоге (дублируется) в обеих очередях.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню