Очередь сообщений и шина сообщений - в чем различия? - PullRequest
76 голосов
/ 17 октября 2011

И есть ли? Для меня MB знает как подписчиков, так и издателей, и выступает в роли посредника, уведомляя подписчиков о новых сообщениях (по сути, модель «push»). С другой стороны, MQ - это скорее модель «вытягивания», когда потребители извлекают сообщения из очереди.

Я совершенно не в курсе?

Ответы [ 6 ]

87 голосов
/ 28 ноября 2015

Шина сообщений

A Шина сообщений - это инфраструктура обмена сообщениями, позволяющая различным системам взаимодействовать через общий набор интерфейсы ( шина сообщений ).

enter image description here

Источник: EIP

Очередь сообщений

Основная идея очереди сообщений проста:

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

  • Процесс отправки помещает через некоторый (OS) модуль передачи сообщений сообщение в очередь, которая может быть прочитана другим процессом

Источник: Дэйв Маршалл

enter image description here

Источник изображения

Разница

Очередь сообщений содержит FIFO ( first first first out ), тогда как в Message Bus нет.

Заключение

Обе LOOK похожи на выполнение одной и той же работы - передача сообщений между двумя Приложения или Модули или Интерфейсы или Системы или Процессы , за исключением небольшой разницы FIFO

36 голосов
/ 20 октября 2011

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

BUS vs. QUEUE действительно является несколько устаревшей концепцией, совсем недавно возникшей из таких систем, как IBM MQ и Tibco Rendezvous.Изначально MQ представлял собой систему 1: 1, действительно очередь для разделения различных систем.

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

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

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

14 голосов
/ 23 октября 2017

Между этими двумя понятиями произошло некоторое размывание границ, поскольку некоторые продукты теперь поддерживают функции, которые ранее принадлежали только одной или другой категории (например, Azure Service Bus поддерживает оба подхода).

ОЧЕРЕДЬ

Очередь сообщений получает сообщения от приложения и делает их доступными для одного или нескольких других приложений способом «первым пришел - первым вышел» (FIFO). Во многих архитектурных сценариях, если приложению A необходимо отправить обновления или команды приложениям B и C, то для B и C могут быть установлены отдельные очереди сообщений. A будет записывать отдельные сообщения в каждую очередь, и каждое зависимое приложение будет читать из своего собственная очередь (сообщение удаляется при удалении из очереди). Ни B, ни C не должны быть доступны, чтобы A мог отправлять обновления. Каждая очередь сообщений является постоянной, поэтому, если приложение перезапустится, оно начнет извлекать из своей очереди, как только оно вернется в оперативный режим. Это помогает нарушать зависимости между зависимыми системами и может обеспечить большую масштабируемость и отказоустойчивость для приложений.

BUS

Шина сообщений или служебная шина обеспечивает способ для одного (или нескольких) приложений передавать сообщения одному или нескольким другим приложениям. Может не быть никакой гарантии заказа «первым пришел - первым вышел», и абоненты автобуса могут приходить и уходить без ведома отправителей сообщений. Таким образом, приложение A может быть написано для передачи обновлений статуса приложению B через шину сообщений. Позже написано приложение C, которое также может воспользоваться этими обновлениями. Приложение C может быть настроено на прослушивание шины сообщений и выполнение действий на основе этих обновлений, не требуя обновления приложения A. В отличие от очередей, когда отправляющее приложение явно добавляет сообщения в каждую очередь, шина сообщений использует публикацию / подписаться на модель. Сообщения публикуются на шине, и любое приложение, подписавшееся на такого рода сообщения, получит его. Этот подход позволяет приложениям следовать принципу открытия / закрытия, поскольку они становятся открытыми для будущих изменений, оставаясь закрытыми для дополнительных изменений.

ИСТОЧНИК

11 голосов
/ 11 января 2016

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

3 голосов
/ 16 апреля 2015

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

0 голосов
/ 05 декабря 2018

Сервисная шина является более общим термином, чем очередь сообщений.

MQ - это простой FIFO, но есть более сложные способы реализации служебной шины, то есть концентратор событий, который является огромным «центром» для манипулирования сообщениями.Помимо функций, предоставляемых MQ, он позволяет хранить сообщения (и, следовательно, использовать несколько подписчиков) и т. Д.

...