Какова цель сеанса JMS? - PullRequest
       11

Какова цель сеанса JMS?

22 голосов
/ 22 апреля 2010

Какова цель сеанса JMS? Почему одного соединения недостаточно для обмена сообщениями JMS между отправителями и получателями?

Ответы [ 2 ]

9 голосов
/ 22 апреля 2010

См. Java.sun.com

Объект Session - это однопоточный контекст для создания и потребления сообщений.Хотя он может выделять ресурсы поставщика вне виртуальной машины Java (JVM), он считается легким объектом JMS.

Сеанс служит нескольким целям:

  • Это фабрика для егопроизводители и потребители сообщений.
  • Поставляет фабрики сообщений, оптимизированные для провайдеров.
  • Поддерживает одну серию транзакций, объединяющих работу, охватывающую ее производителей и потребителей, в атомарные единицы.
  • Он определяет последовательный порядок для сообщений, которые он потребляет, и сообщений, которые он создает.
  • Он сохраняет сообщения, которые он потребляет, до тех пор, пока они не будут подтверждены.
  • Он сериализует выполнение прослушивателей сообщений, зарегистрированных его потребителями сообщений.,

Сеанс может создавать и обслуживать несколько производителей и потребителей сообщений.

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

6 голосов
/ 18 мая 2017

У меня был тот же вопрос, и вот что привело меня сюда. Цитировать Doc в этом случае не очень полезно, так как я уверен, что вопрос OP не в том, как использовать сессии или что они делают, а в том, почему они действительно существуют, почему бы не объединить их возможности с Connection. ИМХО, это мета вопрос.

Грубо говоря, сеансы - это, по сути, представление потока в соединении. Вот что спецификация JMS должна сказать об отношении между потоком и сеансом при доступе к последующему.

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

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

Сказав это, довольно часто между соединением и сеансом будет отображаться соотношение 1: 1. Вот почему я думаю, что JMSContext был представлен в 2.0. чтобы упростить вещи.

Глядя на дату поста ОП, я думаю, что опоздал почти на десять лет. : D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...