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


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

Я что, совсем сбился с пути?

5 61

5 ответов:

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

The автобус и очереди это действительно несколько устаревшая концепция, в последнее время вытекающая из таких систем, как IBM MQ и Tibco Rendezvous. MQ был первоначально системой 1:1, Действительно очередь, чтобы отделить различные системы.

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

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

фраза сообщений-очереди также используется для внутренних интра-нить насосов сообщение и тому подобное, и в этом контексте, использование действительно, разные. Если вы думаете о классическом Windows message pump, это действительно больше модель pull, которую вы описываете, но на самом деле это больше intra-app, чем inter-app или inter-box.

Автобус Сообщением

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

enter image description here

источник: EIP

Очереди Сообщений

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

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

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

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

enter image description here

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

разница

Очереди Сообщений содержит FIFO(первый в первый выход) правило тогда как в Автобус Сообщением нет.

вывод

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

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

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

очереди

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

автобус

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

источник

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