2013-07-02 4 views
5

Я пытаюсь понять пример использования Queue.JMS Topic vs Queue - Intent

Мое понимание: Очередь означает «один к одному». Единственным вариантом использования (если не редкость, очень мало) было бы: Сообщение предназначено только для одного потребления.

Но даже в таких случаях я могу использовать тему (только для будущего безопасности). Единственная дополнительная осторожность - сделать подписки прочными. Или, в особых ситуациях, я бы использовал механизм моста/диспетчера.

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

Пожалуйста, дайте мне знать, что мне не хватает здесь, или мне не хватает первоначального намерения?

+0

не являются комментариями лучше, чем «просто» downvote? –

ответ

3

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

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

... и примеры, когда использовать темы ...

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

Вы сказали ...

Но даже в тех случаях, , Я могу использовать тему (просто чтобы быть будущим безопасным). Единственный дополнительный случай, который мне нужно будет сделать, - сделать (каждый) подписка прочной. Или, в особых ситуациях, я использовал бы мостовой/ диспетчерский механизм.

Вы перепроектируете дизайн.Это правда, вы можете добиться ровно одной обработки с использованием темы и долговечного подписчика, но вы должны быть ограничены одним прочным подписчиком ; когда вы запустите другого абонента для этой темы, вы получите дублирующую обработку для того же сообщения, не говоря уже о том, что один долговечный подписчик вряд ли является решением, которое масштабируется; это было бы узким местом в вашей системе. С очередью вы можете развернуть 1000 приемников на 100 узлах для одной очереди, и вы все равно получите ровно одну обработку для одного сообщения.

Вы сказали ...

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

Использование отправленной очереди с подписчиком темы является излишним. Вы обычно получаете асинхронную диспетчеризацию при использовании очередей, поэтому почему бы просто не использовать очередь? ... нет причин ставить тему перед ней.

0

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

Если вы в своем случае уверены, что есть только один абонент, то абонент очереди и прочный подписчик тем же образом будут вести себя аналогичным образом. Я бы предпочел посмотреть на такой сценарий, как «частный случай».

+1

2. Мое мнение: даже в «специальном случае» я хотел бы пойти на тему, потому что в будущем я могу иметь более одного подписчика на сообщение. –

+0

1: Пожалуйста, уточните свой вопрос. Вы не понимаете, что значит иметь несколько подписчиков (получателей на языке JMS) в очереди? Из-за семантики PTP и что JMS гарантирует, что подтвержденные сообщения не будут повторно добавлены, вы можете предположить, что сообщение о очереди отправляется только одному получателю. JMS не указывает, к какому получателю доставляется сообщение. 2: Нет, но вы можете знать, подходит ли очередь или тема для удовлетворения ваших бизнес-требований. – jarnbjo

+0

Хорошо. Я пытаюсь переформулировать мой вопрос: что является веской причиной для использования очереди? Все, что может быть достигнуто в очереди, может быть достигнуто Темами (наряду с большей гибкостью) с небольшой дополнительной осторожностью в обеспечении долговечности подписчиков. –

0

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

+0

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