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

Мне было интересно узнать разницу между JMS Queue и JMS Topic.

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

Темы

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

Очередь

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

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

Любые мысли?

Ответ 1

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

Ответ 2

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

Ответ 3

Очередь VS Тема

Queue:

 - Point-to-point model.
 - Only one consumer gets the message.
 - Messages have to be delivered in the order sent.
 - A JMS queue only guarantees that each message is processed only once.
 - The Queue knows who the consumer or the JMS client is. The destination is known.
 - The JMS client (the consumer) does not have to be  active or connected to the queue all the time to receive or read the message.
 - Every message successfully processed is acknowledged by the consumer.

Topic:

 - Publish/subscribe model.
 - Multiple clients subscribe to the message.
 - There is no guarantee messages have to be delivered in the order sent.
 - There is no guarantees that each message is processed only once.As this can be sensed from the model.
 - The Topic, have multiple subscribers and there is a chance that the topic does not know all the subscribers. The destination is unknown.
 - The subscriber / JMS client needs to the active when the messages are produced by the producer, unless the subscription was a durable subscription.
 - No, Every message successfully processed is not acknowledged by the consumer/subscriber.

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

Тема: описательный пример: тема JMS - это канал, через который пользователи подписываются на получение определенных сообщений от производителя в опубликовать и подписать модель обмена сообщениями JMS. Модель может быть по сравнению с подпиской на газету; например, если Джон Доу подписались на "The New York Times", он получал бы газету каждый день от продюсера газеты. Аналогично, если Джон Доу использовал JMS обмен сообщениями, чтобы подписаться на конкретную тему, он получит все отправил сообщения от производителя относительно этой темы.

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

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

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

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

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

Ответ 7

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

Ответ 8

Очереди

Pros

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

Cons

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

темы

Pros

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

Cons

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

Ответ 9

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

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