Когда использовать экскаваторы RabbitMQ, а когда плагин "Федерация"?

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

На основании информации, опубликованной на веб-сайте RabbitMQ, я не получаю ее, когда мне нужно выбрать лопаты или когда мне нужно выбрать плагин федерации.

RabbitMQ имеет следующее объяснение, когда что использовать:

Обычно вы используете лопату для связи брокеров через Интернет, когда вам нужен больший контроль, чем обеспечивает федерация.

Что такое мелкий контроль зерна в лопатах, который мне не хватает, когда я выбираю федерацию?

На данный момент я думаю, что предпочел бы плагин федерации, потому что я мог бы автоматизировать взаимодействие между vhost через REST API, предоставляемый плагином федерации. В случае с совками мне нужно будет изменить конфигурацию лопаты и перезагружать экземпляр RabbitMQ каждый раз, когда мы хотим разделить событие между vhosts. Мои мысли верны по этому поводу?

В настоящее время мы запускаем RMQ в Windows с клиентами, подключающимися из.NET. В ближайшее время присоединятся клиенты Java/Perl/PHP.

Подводя итог моим вопросам:

  • Что такое мелкий контроль зерна в лопатах, который мне не хватает, когда я
    выбрать для федерации?
  • Правильно ли, что единственный способ изменить связь между vhost при использовании лопат - это изменить файл конфигурации и перезагрузить экземпляр?
  • Имеет ли смысл настройка (vhost на приложение) или я полностью упускаю суть?

2 ответа

Решение

Совки и очереди предоставляют различные средства для пересылки сообщений от одного узла RabbitMQ к другому.

Федеративная биржа

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

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

Федеративная очередь(ПРИМЕЧАНИЕ: они новые в RabbitMQ 3.2.x)

С помощью федеративной очереди потребители могут быть подключены к очереди как на восходящем (исходном), так и на нисходящем (целевом) узлах.

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

Любые сообщения, используемые в нисходящей (объединенной) очереди, будут недоступны для потребителей в восходящей очереди.

Случай использования:

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

Вариант использования: из документов RabbitMQ

Типичное использование будет иметь одинаковую "логическую" очередь, распределенную по многим брокерам. Каждый посредник объявляет объединенную очередь со всеми другими объединенными очередями в восходящем направлении. (Ссылки сформировали бы полный двунаправленный граф на n очередях.)

лопата

Лопаты, с другой стороны, присоединяют очередь "вверх по течению" к обмену "вниз по течению". (Я помещаю термины в кавычки, потому что документация по лопатам не описывает узлы с той же семантикой, что и документация федерации.)

Лопата получает сообщения из очереди и отправляет их в обмен на узле назначения. (ПРИМЕЧАНИЕ. Хотя это обычно не обсуждается как часть этого шаблона, ничто не мешает потребителю подключиться к очереди в исходном узле.)

Чтобы ответить на конкретные вопросы:

Что такое мелкий контроль зерна в лопатах, который мне не хватает, когда я выбираю федерацию?

Лопата не обязательно должна находиться в "восходящем" или "нисходящем" узле. Он может быть настроен и работать с независимого узла.

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

Правильно ли, что единственный способ изменить связь между vhost при использовании лопат - это изменить файл конфигурации и перезагрузить экземпляр?

Это, как правило, было принято обратной стороной лопаты.

С помощью следующей команды (caveat: протестировано только на RabbitMQ 3.1.x и с очень rabbitmq.config файл, который содержит только) вы можете перезагрузить конфигурацию лопаты из указанного файла. (в этом случае /etc/rabbitmq/rabbitmq.config)

rabbitmqctl eval 'application:stop(rabbitmq_shovel), {ok, [[{rabbit, _}|[{rabbitmq_shovel, [{shovels, Shovels}] }]]]} = file:consult("/etc/rabbitmq/rabbitmq.config"), application:set_env(rabbitmq_shovel, shovels, Shovels), application:start(rabbitmq_shovel).'

,

Имеет ли смысл настройка (vhost на приложение) или я полностью упускаю суть?

Это решение будет зависеть от вашего варианта использования. vhosts в первую очередь обеспечивают логическое (и доступное) разделение между очередями / обменами и авторизованными пользователями.

Лопата действует как хорошо разработанный встроенный потребитель. Он может принимать сообщения от исходного посредника и очереди, а также публиковать их в конечном посреднике и обмениваться ими. Вы могли бы написать приложение, чтобы сделать это, но Shovel уже понял это правильно - если все, что вам нужно, это переместить сообщения из очереди на обмен в том же или другом брокере, то Shovel может сделать это за вас. Так же, как приложение с хорошим поведением, оно может объявлять обмены / очереди / привязки, переподключаться, изменять ключ маршрутизации и т. Д. Вы можете установить его в исходном или в конечном посреднике или даже использовать третьего посредника. Это в основном клиент AMQP.

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

Напомним, что федерация работает на более высоком уровне, в то время как лопата в основном "просто" хорошо написанный клиент.

Чтобы перенастроить лопату, вам, к сожалению, необходимо перезапустить брокер.

Я не думаю, что вам действительно нужен Vhost на приложение. Вы можете добавить пользователя для каждого приложения в брокер без отдельных vhosts. Не уверен, что вы имеете в виду под "поделиться событием между vhosts", хотя.

Другие вопросы по тегам