Когда использовать лопаты RabbitMQ и когда плагин Federation?

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

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

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

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

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

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

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

Обобщение моих вопросов:

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

Ответ 1

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

Federated Exchange

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

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

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

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

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

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

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

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

Случай использования: из документов RabbitMQ

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

Лопата

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

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

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

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

Лопата не должна находиться на "восходящем" или "нисходящем потоке" node. Его можно настроить и использовать с независимого node.

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

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

Это, как правило, было признанным недостатком лопаты.

Со следующей командой (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 в первую очередь обеспечивают логическое (и доступное) разделение между очередями/обменами и авторизованными пользователями.

Ответ 2

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

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

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

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

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