Очередь сообщений и шина сообщений - в чем различия?


97

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

Я здесь совсем сбился с пути?

Ответы:


47

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

BUS против ОЧЕРЕДИ действительно несколько наследства концепции, в последнее время , вытекающая из систем , таких как IBM MQ и Tibco Rendezvous. Первоначально MQ была системой 1: 1, фактически, очередью для разделения различных систем.

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

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

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


114

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

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

введите описание изображения здесь

Источник: EIP

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

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

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

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

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

введите описание изображения здесь

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

Разница

Очередь сообщений содержит правило FIFO ( первый пришел - первый ушел ), тогда как в шине сообщений его нет.

Вывод

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


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

22
Обычно вы добавляете кредиты, когда откуда-то берете текст и изображения. Я добавил источники.
jgauffin

25

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

ОЧЕРЕДЬ

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

Автобус

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

ИСТОЧНИК


15

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


1
Не совсем так, по крайней мере, сейчас. Такие сервисы, как Amazon SQS, позволят нескольким читателям прочитать одно и то же сообщение. Период «невидимости» настраивается. Многие системы очередей имеют такие функции, а также повторные попытки и очереди недоставленных сообщений.
Том

2
@Tom OP не упомянул никаких конкретных продуктов, поэтому я думаю, что он пытается понять терминологию и концепции - в этом смысле я нашел этот ответ полезным и правдивым; Даже если верно и то, что поставщики создают гибридные продукты на основе обеих концепций, я думаю, что терминология остается актуальной и полезной.
mindplay.dk

4

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


0

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

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


0

Шина сообщений - это модель распределения "один ко многим". Пункт назначения в этой модели обычно называется темой или предметом. Все подписчики-потребители получают одно и то же опубликованное сообщение. Вы также можете назвать это «трансляционной» моделью. Вы можете думать о теме как о эквиваленте предмета в шаблоне проектирования Observer для распределенных вычислений. Некоторые провайдеры шины сообщений предпочитают реализовывать это как UDP вместо TCP. Для темы сообщение доставляется по принципу «запустил и забыл» - если никто не слушает, сообщение просто исчезает. Если это не то, что вам нужно, вы можете использовать «постоянные подписки».

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

Я бы сказал, что в большинстве сред лучше всего подходят темы, потому что вы всегда можете добавить дополнительные компоненты, не меняя архитектуру. Добавленными компонентами могут быть мониторинг, ведение журнала, аналитика и т. Д. Вы никогда не знаете в начале проекта, какими будут требования через 1 год, 5 лет, 10 лет. Изменения неизбежны, примите их :-)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.