Подтвердить что ты не робот

Путаница сообщений: Pub/Sub vs Multicast vs Fan Out

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

Pub/Sub vs Многоадресная рассылка vs Fan out Я работаю со следующими определениями:

  • Pub/Sub издатели предоставляют отдельную копию каждого сообщения для каждый абонент означает, что существует возможность гарантировать доставку.
  • Fan Out имеет одну очередь, нажимающую на все прослушивание клиентов.
  • Многоадресная рассылка просто рассылает данные и если кто-то слушает то отлично, если нет, это не имеет значения. Нет возможности гарантировать, что клиент определенно получает сообщение.

Правильно ли эти определения? Или есть Pub/Sub шаблон и многоадресная рассылка, прямой, разветвление и т.д. Способы достижения шаблона?

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

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

4b9b3361

Ответ 1

Я смущен вашим выбором из трех условий для сравнения. В пределах RabbitMQ, Fanout и Direct являются типами обмена. Pub-Sub - это общий шаблон обмена сообщениями, но не тип обмена. И вы даже не указали третий и самый важный тип Exchange, а именно "Тема". Фактически, вы можете реализовать поведение Fanout в обмене Темами, просто объявив несколько очередей с одним и тем же ключом привязки. И вы можете определить Прямое поведение в обмене Темами, объявив Очередь с * в качестве ключа привязки подстановочного знака.

Pub-Sub обычно понимается как шаблон, в котором приложение публикует сообщения, которые потребляются несколькими подписчиками.

С RabbitMQ/AMQP важно помнить, что сообщения всегда публикуются для обмена. Затем обменивается маршрутом на очереди. И очереди доставляют сообщения подписчикам. Поведение обмена важно. В разделе "Обмен томами" ключ маршрутизации от издателя сопоставляется с ключом привязки от абонента для принятия решения о маршрутизации. Клавиши привязки могут иметь шаблоны подстановочных знаков, которые в дальнейшем влияют на решение о маршрутизации. Более сложная маршрутизация может выполняться на основе содержимого заголовков сообщений с использованием типа обмена заголовками

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

Ответ 2

Ваши определения в значительной степени правильны. Обратите внимание, что гарантированная доставка не ограничивается только pub/sub, и это также можно сделать с помощью разветвления. И да, pub/sub - это очень базовое описание, которое может быть реализовано с помощью специальных методов, таких как разветвление, прямое и т.д.

Есть больше шаблонов обмена сообщениями, которые могут оказаться полезными. Подробнее см. Шаблоны интеграции предприятия.

Ответ 3

С точки зрения электронного обмена термин "многоадресная рассылка" означает "сообщение помещается на провод один раз", и все клиентские приложения, которые прослушивают, могут считывать сообщение с "провода". Любое решение, которое делает N копий сообщения для N клиентов, не является многоадресной. В дополнение к рассмотрению исходного кода можно также использовать "сниффер", чтобы определить, сколько копий сообщения отправлено по кабелю из системы обмена сообщениями. И да, многоадресные сообщения являются формой сообщения протокола UDP. См. http://en.wikipedia.org/wiki/Multicast для общего описания. Около десяти лет назад мы использовали систему обмена сообщениями от TIBCO, поддерживающую многоадресную рассылку. См.: https://docs.tibco.com/pub/ems_openvms_c_client/8.0.0-june-2013/docs/html/tib_ems_users_guide/wwhelp/wwhimpl/common/html/wwhelp.htm#context=tib_ems_users_guide&file=EMS.5.091.htm