Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Vstup.docx
Скачиваний:
47
Добавлен:
28.09.2019
Размер:
6.42 Mб
Скачать

Модель сообщений jms

Сообщение представляется как легковесный entity, состоящий из заголовка и тела. Заголовок хранит какую-то служебную информацию, толо - информацию клиентов. Формат и точное содержание заголовка могут отличаться в различных продуктах.

Модель сообщений ставит следующие цели:

  • Предоставить единый унифицированный API сообщений.

  • Предоставить API, подходящий для создания сообщений, в существующем формате не-JMS приложений.

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

  • Поддержка сообщений, содержащих java объекты.

JMS сообщение состоит из следующих частей:

  • Заголовок - все сообщения содержат одинаковый набор полей в заголовке.

  • Свойства (properties) - в дополнение к стандартным полям заголовка существуют опциональные.

    • предоставляется возможность добавлять Application-specific properties к заголовку.

    • стандартные properties - JMS определяет несколько стандартных (опциональных) properties.

    • Provider-specific properties - JMS определяет соглашение по их именованию.

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

Поля заголовка

JMSDestination

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

JMSDeliveryMode

Сожержит режим доставки сообщения. Подробности см. раздел 4.7.

JMSMessageID

Содержит уникальный идентификатор сообщения, отправленных провайдером. JMSMessageID - строка, которая должна уникально идентифицировать сообщение в хранилище истории. Точно степень уникальности определяется провайдером. Поле JMSMessageID должно начинаться с префикса 'ID:'. Уникальность сообщений между различными провайдерами не требуется.

JMSTimestamp

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

JMSCorrelationID

Поле может использоваться клиентом чтобы связать одно сообщение с другим. Обычно используется для связывания сообщения-запроса и сообщения-ответа. Поле может содержать:

  • определенный провайдером id сообщения

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

  • определенный провайдером byte[] (provider-native byte[] value), используется для поддержки не-JMS провайдеров.

Как только сообщение отправлено провайдером, ему присваивается id.

JMSReplyTo

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

JMSRedelivered

Если клиент получает сообщение с этим выставленным флагом, то скорее всего (но не обязательно), это сообщение доставляется повторно. И клиент должен предпринять какие-то действия в связи с этим, чтобы не обработать сообщение повторно. См. 4.4.11 подробнее.

JMSType

Содержит идентификатор типа сообщения, выставяемого клиентом при отсылке сообщения. Некоторые провайдеры используют репозиторий сообщений, в котором содержатся определения сообщений, отсылаемых приложениями. Это поле может содержать ссылку на определение из этого репозитория. Но JMS не определяет подобного стандартного репозитория. Некоторые продукты имеют подобные репозитории и обязывают клиента заполнять это поле.

JMSExpiration

В момент отсылки, "срок годности" (время его истечения) сообщения вычисляется как сумма "time-to-live" значения, определенного при отсылке, и текущего GMT времени. Вычисленное значение записывается в поле JMSExpiration. Если time-to-live установить в 0, то "срок годности" будет также равен нулю, что означает отсутствие временных ограничений по доставке сообщения.

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

JMSPriority

Содержит приоритет сообщения. JMS определяет 10 уровней приоритета: от 0 до 9. Значения 0-4 считаются нормальным приоритетом, 5-9 - срочным. JMS не требует от провайдера строгого следования приоритетам.

Как значения полей заголовка устанавливаются

Таблица 3-1

Поле

Кем устанавливается

JMSDestination

Send Method

JMSDeliveryMode

Send Method

JMSExpiration

Send Method

JMSPriority

Send Method

JMSMessageID

Send Method

JMSTimestamp

Send Method

JMSCorrelationID

Client

JMSReplyTo

Client

JMSType

Client

JMSRedelivered

Provider

Переопределение значений полей

JMS позволяет администратору настроить в JMS переопределение значений, выставленных пользователем, для следующих полей: JMSDeliveryMode, JMSExpiration и JMSPriority. Если это сделано, значения этих полей будут переопределяться. Но JMS не определяет порядок переопределения и, кроме того, не требует реализации этой функции.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]