По большому счету, когда дело доходит до программных продуктов поставщиков, они используются взаимозаменяемо и не имеют сильных различий с точки зрения выталкивания или выталкивания, как вы описываете.
BUS против ОЧЕРЕДИ действительно несколько наследства концепции, в последнее время , вытекающая из систем , таких как IBM MQ и Tibco Rendezvous. Первоначально MQ была системой 1: 1, фактически, очередью для разделения различных систем.
Tibco, напротив, была (продавалась как) магистраль обмена сообщениями, где у вас могло быть несколько издателей и подписчиков по одним и тем же темам.
Однако в наши дни оба (и более новые конкурирующие продукты) могут играть друг против друга. Оба могут быть настроены на прерывание, а также на опрос новых сообщений. Оба опосредуют взаимодействие между различными системами.
Однако фраза « очередь сообщений» также используется для внутренней перекачки сообщений внутри потока и т.п., и в этом контексте использование действительно отличается. Если вы думаете о классическом насосе сообщений Windows, это действительно больше модель извлечения, которую вы описываете, но на самом деле это больше внутри приложения, чем между приложениями или промежуточными блоками.
Границы между этими двумя концепциями несколько размылись, поскольку некоторые продукты теперь поддерживают функции, которые ранее принадлежали только одной или другой категории (например, служебная шина Azure поддерживает оба подхода).
ОЧЕРЕДЬ
Очередь сообщений получает сообщения от приложения и делает их доступными для одного или нескольких других приложений в режиме «первым пришел - первым обслужен» (FIFO). Во многих архитектурных сценариях, если приложению A необходимо отправлять обновления или команды приложениям B и C, тогда для B и C можно настроить отдельные очереди сообщений. A будет записывать отдельные сообщения в каждую очередь, и каждое зависимое приложение будет читать из своей собственная очередь (сообщение удаляется при исключении из очереди). Ни B, ни C не должны быть доступны, чтобы A мог отправлять обновления. Каждая очередь сообщений является постоянной, поэтому, если приложение перезапустится, оно начнет извлекать из своей очереди после того, как снова подключится к сети. Это помогает устранить зависимости между зависимыми системами и может обеспечить большую масштабируемость и отказоустойчивость приложений.
Автобус
Шина сообщений или служебная шина позволяют одному (или нескольким) приложениям передавать сообщения одному или нескольким другим приложениям. Может не быть гарантии заказа в порядке очереди, и подписчики шины могут приходить и уходить без ведома отправителей сообщений. Таким образом, приложение A может быть написано для передачи обновлений статуса приложению B через шину сообщений. Позже написано приложение C, которое также может извлечь выгоду из этих обновлений. Приложение C может быть настроено для прослушивания шины сообщений и выполнения действий на основе этих обновлений, не требуя каких-либо обновлений для приложения A. В отличие от очередей, где отправляющее приложение явно добавляет сообщения в каждую очередь, шина сообщений использует публикацию / подписаться на модель. Сообщения публикуются в шине, и любое приложение, которое подписалось на такие сообщения, получит их.
ИСТОЧНИК
источник
Основное отличие, которое на самом деле не упоминалось явно в других ответах, заключается в том, что шина сообщений допускает несколько подписчиков, тогда как очередь будет удалять элементы из очереди один за другим для всего, что слушает очередь. Если вы хотите, чтобы несколько слушателей видели одни и те же элементы, выходящие из очереди, вам придется обрабатывать это самостоятельно, сервисная шина сделает это из коробки за вас.
источник
На мой взгляд, очередь сообщений создает шину сообщений . Затем клиенты (т.е. узлы) могут прослушивать шину сообщений. Это особенно верно для случая, когда у вас есть широковещательные сообщения MQ через UDP, другими словами, они отправляют сообщения на широковещательный / многоадресный адрес, не зная и не заботясь о том, кто их будет получать. Более подробное описание этого сценария вы можете найти в этой статье .
источник
Служебная шина - это более общий термин, чем очередь сообщений.
MQ - это простой FIFO, но существуют более сложные способы реализации служебной шины, то есть концентратора событий, который является огромным «центром» для управления сообщениями. Помимо функциональности, предоставляемой MQ, он позволяет хранить сообщения (и, следовательно, использовать несколько подписчиков) и т. Д.
источник
Шина сообщений - это модель распределения "один ко многим". Пункт назначения в этой модели обычно называется темой или предметом. Все подписчики-потребители получают одно и то же опубликованное сообщение. Вы также можете назвать это «трансляционной» моделью. Вы можете думать о теме как о эквиваленте предмета в шаблоне проектирования Observer для распределенных вычислений. Некоторые провайдеры шины сообщений предпочитают реализовывать это как UDP вместо TCP. Для темы сообщение доставляется по принципу «запустил и забыл» - если никто не слушает, сообщение просто исчезает. Если это не то, что вам нужно, вы можете использовать «постоянные подписки».
Очередь сообщений - это адресат сообщений один к одному. Сообщение получает только один из получателей-потребителей (обратите внимание: постоянное использование подписчиков для тематических клиентов и получателей для клиентов очереди позволяет избежать путаницы). Сообщения, отправленные в очередь, хранятся на диске или в памяти до тех пор, пока кто-нибудь не заберет их или не истечет срок их действия. Таким образом, очереди (и постоянные подписки) нуждаются в активном управлении хранилищем, вам нужно подумать о медленных потребителях.
Я бы сказал, что в большинстве сред лучше всего подходят темы, потому что вы всегда можете добавить дополнительные компоненты, не меняя архитектуру. Добавленными компонентами могут быть мониторинг, ведение журнала, аналитика и т. Д. Вы никогда не знаете в начале проекта, какими будут требования через 1 год, 5 лет, 10 лет. Изменения неизбежны, примите их :-)
источник