Путаница в обмене сообщениями: Pub / Sub vs Multicast vs Fan Out - PullRequest
37 голосов
/ 24 ноября 2011

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

Pub / Sub vs Multicast против Fan Out Я работаю со следующими определениями:

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

Верны ли эти определения?Или Pub / Sub - это паттерн и многоадресный, прямой, разветвленный и т. Д. Способы получения паттерна?

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

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

Ответы [ 3 ]

37 голосов
/ 26 ноября 2011

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

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

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

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

9 голосов
/ 25 ноября 2011

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

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

1 голос
/ 23 октября 2014

С точки зрения электронного обмена термин «многоадресная передача» означает «сообщение помещается на провод один раз», и все клиентские приложения, которые прослушивают, могут прочитать сообщение с «провода».Любое решение, которое делает 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

...