Тема JMS против очередей

Мне было интересно, в чем разница между очередью JMS и темой JMS.

На странице ActiveMQ говорится

Темы

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

Очереди

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

Я хочу иметь «что-то», что будет отправлять копию сообщения каждому подписчику в той же последовательности, в которой сообщение было получено брокером ActiveMQ.

Есть предположения?


person Poliquin    schedule 07.04.2011    source источник


Ответы (9)


Значит, тема уместна. Очередь означает, что сообщение отправляется одному и только одному возможному подписчику. Тема достается каждому подписчику.

person Joseph Ottinger    schedule 07.04.2011
comment
Есть идеи, как работает балансировка нагрузки для очередей в JMS или WSO2 MB? - person Kulasangar; 18.04.2016
comment
это интересно, потому что я пытался отладить какого-то подписчика и при отправке темы подписчик не вызывался, но при отправке в очередь он работал - person vmrvictor; 23.07.2019

Темы предназначены для модели издатель-подписчик, а очереди - для двухточечной связи.

person vikram    schedule 31.07.2013

Это просто:

Очереди = Вставить> Снять (отправить одному подписчику) 1: 1

Темы = Вставить> Рассылка (отправить всем подписчикам) 1: n

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

person Daniel Perník    schedule 19.03.2019
comment
Примером может служить простая социальная сеть. Кому-то "нравится" сообщение. Серверная часть публикует для этой темы событие «ПОЧТИ ЛАЙК». Его потребляют 3 подписчика: notificationProcessor (отправляет уведомление постеру), karmaProcessor (дает карму лайкеру и постеру), feedProcessor (перемещается вверх в ленты людей). Все конечно асинхронно. - person Siddhartha; 23.09.2019
comment
@Siddhartha, это может быть ответ в виде примера, спасибо! - person SeleM; 20.02.2020

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

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

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

person Axel Podehl    schedule 15.05.2017

Очереди

Плюсы

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

Минусы

  • Только один потребитель может получить сообщение
  • Подразумевает связь между производителем и потребителем, поскольку это взаимно однозначное отношение.

Темы

Плюсы

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

Минусы

  • Более сложный коммуникационный поток
  • Сообщение не может быть восстановлено для одного слушателя
person abhimanyu    schedule 10.01.2019

Что касается сохранения порядка, см. эту страницу ActiveMQ. Вкратце: порядок сохраняется для отдельных потребителей, но для нескольких потребителей порядок доставки не гарантируется.

person eebbesen    schedule 09.07.2013

Если у вас N потребителей, то:

Темы JMS доставляют сообщения в N из N Очереди JMS доставляют сообщения в 1 из N

Вы сказали, что «хотите иметь« вещь », которая будет отправлять копию сообщения каждому подписчику в той же последовательности, в которой сообщение было получено брокером ActiveMQ».

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

person Hans Jespersen    schedule 17.01.2015

ТЕМА :: тема - это общение один-ко-многим ... (многоточечное или публикация / подписка) Пример: -представьте, что издатель публикует фильм на YouTube, тогда все его подписчики получат уведомление .... QUEVE :: queve - один-к -один коммуникация ... Пример: -При публикации запроса на пополнение счета он перейдет только к одному qreciever ... всегда помните, что если запрос идет ко всем qreceiver, то произошло многократное пополнение, поэтому при разработке анализа, который подходит для приложения

person siddartha kamble    schedule 10.06.2018

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

Тема заключается в том, что все подписчики темы получают одно и то же сообщение при публикации сообщения.

person Geetha reddy Manukonda    schedule 07.02.2014
comment
Сообщения очереди будут использоваться только один раз одним потребителем, поэтому в очереди реализован балансировщик нагрузки. Подписки на темы могут быть надежными : подписчик может получить сообщение еще долго после публикации (например, если подписчик отключился и снова появится). - person Gruber; 17.08.2015