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

1.3 Модели передачи сообщений

JMS предоставляет две модели передачи сообщений (т.н. зоны сообщений (messa­ging domains)): «изда­ние - подписка» (publish an subscribe) и «точка - точка» (point to point).

Модель передачи сообщений «изда­ние - подписка»

Модель передачи сообщений «изда­ние - подписка» (рисунки 5…6) определена в пакете javax.jms.Topic и используется в том случае, ес­ли сообщение, отправленное одним клиентом, должно быть получено несколькими другими клиентами.

Рисунок 5 - Модель взаимодействия клиентов по некоторой теме

Рисунок 6 – Буферизация сообщений в модели взаимодействия «издание - подписка»

При использовании модели взаимодействия «издание - подписка» один поставщик может посылать сообщения многим потребителям через виртуальный канал, называе­мый темой (topic).

Потребители могут выбрать подписку (subscribe) на любую тему. Все сообщения, на­правляемые в тему, передаются всем потребителям данной темы. Каждый потребитель при­нимает копию каждого сообщения. В JMS эта концепция реализуется с помощью спе­циаль­ных слушателей (listeners), регистрируемых в системе. При возникновении но­вого со­бытия слушатель, закрепленный за данной темой, возбуждается.

Следует отметить, что при испо­льзовании модели «издание - подписка» клиенты JMS могут устанавливать долговременные подписки, позволяющие потребителям отсоединяться и позже снова подключяться и получать сообщения, поступившие во время отключения связи.

TopicConnectionFactory

TopicConnectionFactory - управляемый ресурс, получаемый с помощью обращения к JNDI для получения доступа к провайдеру. С помощью его метода createTopicConnection() мы можем получить объект TopicConnection.

 

TopicConnection

TopicConnection – создает подключение к провайдеру. Методы TopicConnection приведены в таблице 2.

 Таблица 2

Название метода

Описание

createTopicSession

(boolean, int)

Метод возвращает объект TopicSession. Первый логический параметр указывает на то, будет ли сессия помечена как «transacted», второй целочисельный параметр — тип уведомления о доставке

start( )

Активирует получение сообщений от провайдера

stop( )

Временно приостанавливает получение сообщений, возобновить которое можно повторным вызовом метода start()

close( )

Закрывает соединение с провайдером и высвобождает все задействованные ранее ресурсы.

 

TopicSession

TopicSession – однопоточный контекст для получения сообщений. Методы TopicSession приведены в таблице 3.

Таблица 3

Название метода

Описание

createPublisher(Topic)

Возвращает объект TopicPublisher для отправки сообщений в определенную тему

createSubscriber(Topic)

Возвращает TopicSubscriber, объект для получения сообщений из определенной темы. Сообщения будут приходить до тех пор, пока существует сам объект.

createDurableSubscriber

(Topic, String)

Возвращает TopicSubscriber, одновременно именуя подписку с помощью переданного второго параметра. Даже если подписчик неактивен, JMS сохранит их и доставит при первой же активации объекта или создании нового с таким же именем.

unsubscribe(String)

Отписывает от темы с заданным именем

commit( )

Подтверждает все входящие или исходящие сообщения

rollback( )

Откатывает все входящие или исходящие сообщения

create<тип сообщения>

Message(...)

Набор методов для создания сообщений определенного типа

 

Topic

Topic представляет собой хранилище сообщений и так же, как и TopicConnectionFac­to­ry, является управляемым объектом.

 

TopicPublisher

TopicPublisher — объект, использующийся для отправки сообщений. Некоторые из основных методов TopicPublisher приведены в таблице 4.

Таблица 4

Название метода

Описание

publish(Message)

Публикует указанное сообщение

setDeliveryMode(int)

Устанавливает тип доставки сообщения:

  • DeliveryMode.PERSISTENT — сообщение будет храниться до тех пор, пока не будет принято адресатом

  • DeliveryMode.NON_PERSISTENT — сообщение будет автомати­чески удалено, если адресат недоступен в момент доставки.

setPriority(int)

Устанавливает приоритет отправленного сообщения. В качестве параметра можно передать целое число в диапазоне от 0…9.

setTimeToLive(long)

Устанавливает время жизни отправляемого сообщения.

  TopicSubscriber

TopicSubscriber используется для получения сообщений. Некоторые из основных методов TopicSubscriber приведены в таблице 5.

 Таблица 5

Название метода

Описание

receive( )

Получает очередное сообщение. Метод блокируется до тех пор, пока сообщение не будет получено.

receive(long)

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

receiveNoWait( )

Получает очередное сообщение. Если оно сразу же не было доступно, то метод просто завершает работу, ничего не возвращая.

setMessageListener

(MessageListener)

Устанавливает слушателя (MessageListener), который получает сообщения асинхронно.

 

Отметим также, что существуют прочная (durable) и непрочная (non-durable) подпис­ки. Прочная подписка (рисунок 7) гарантирует, что подписчик получит все сообщения, по­сланные в теме, а непрочная подписка не дает никаких гарантий насчет тех сообщений, которые были отосланы в момент, когда клиент был отключен от темы (рисунок 8). 

Рисунок 7 - Прочная подписка. Все сообщения будут обработаны

Рисунок 8 - Непрочная подписка (сообщения M3 и M4 не будут обработаны)

Модель передаче сообщений «точка - точка»

Модель передаче сообщений «точка - точка» (point to point) (рисунок 9) определена в пакете javax.jms.Queue и служит для реализации обмена сообщени­я­ми между двумя компонентами.

Модель передачи сообщений «точка - точка» предоставляет возможность JMS-клиентам по­сы­лать и принимать сообщения (как синхронно, так и асинхронно) через виртуальные каналы, называемые очередями (queues). Модель основывается на методе опроса, при котором сооб­ще­ния явно запрашиваются (считываются) JMS-клиентом из очереди. Несмотря на то, что чтение из очереди могут осуществлять несколько JMS-клиентов, каждое сообщение будет прочи­тано то­лько единожды – JMS-провайдер JMS это гарантирует.

Рисунок 9 - Модель взаимодействия «точка - точка»

QueueConnectionFactory

QueueConnectionFactory – управляемый объект, получаемый из JNDI для создания подключения к провайдеру. QueueConnectionFactory содержит метод генерации createQue­ue­Connection( ), возвращающий объект QueueConnection.

 

QueueConnection

QueueConnection представляет активное подключение к провайдеру. Некоторые из ме­тодов, присущих QueueConnection, перечислены в таблице 6.

 Таблица 6

Название метода

Описание

createQueueSession

(boolean, int)

Метод возвращает объект QueueSession. Первый логический параметр указывает на то, будет ли сессия помечана как «transacted», второй целочисельный параметр — тип уведомления о доставке сообщения

start( )

Активирует получение сообщений от провайдера

stop( )

Временно приостанавливает получение сообщений, возобновить которое можно повторным вызовом метода start( )

close( )

Закрывает соединение с провайдером и высвобождает все задейство­ванные ранее ресурсы.

 

QueueSession

QueueSession — однопоточный контекст для отсылки и приема сообщений. Методы QueueSession приведены в таблице 7.

 Таблица 7

Название метода

Описание

createSender(Queue)

Возвращает объект QueueSender, служащий для передачи сообщений в определенное хранилище (в данном случае, представленное в виде очереди)

createReceiver(Queue)

Возвращает объект QueueReceiver, служащий для приема сообщений из определенного хранилища (в данном случае, представ­ленного в виде очереди)

createBrowser(Queue)

Возвращает объект QueueBrowser, служащий для тех же целей, что и QueueReceiver

commit( )

Подтверждает все входящие или исходящие сообщения

rollback( )

Откатывает все входящие или исходящие сообщения

create<тип сообщения> Message(...)

Набор методов для создания сообщений определенного типа

Queue

Queue инкапсулирует хранилище сообщений. Это управляемый объект, доступ к которому можно получить посредством JNDI.

 

QueueSender

QueueSender – объект, используемый для посылки сообщений. Методы QueueSender приведены в таблице 8.

 Таблица 8

Название метода

Описание

send(Message)

Отсылает указанное сообщение

setDeliveryMode(int)

Устанавливает тип доставки сообщения:

  • DeliveryMode.PERSISTENT — сообщение будет храниться до тех пор, пока не будет принято адресатом

  • DeliveryMode.NON_PERSISTENT — сообщение будет автоматически удалено, если адресат недоступен в момент доставки.

setPriority(int)

Устанавливает приоритет отправленного сообщения. В качестве параметра можно передать целое число в диапазоне от 0…9

setTimeToLive(long)

Устанавливает время жизни отправляемого сообщения.

 

QueueReceiver

QueueReceiver служит для получения сообщений из очереди. Методы QueueReceiver приведены в таблице 9.

 Таблица 9

Название метода

Описание

receive( )

Получает очередное доставленное сообщение. Метод блокируется до тех пор, пока сообщение не будет получено.

receive(long)

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

receiveNoWait( )

Получает очередное сообщение. Если оно сразу же не было доступно, то метод просто завершает работу, ничего не возвращая.

setMessageListener

(MessageListener)

Устанавливает слушателя (MessageListener), который получает сооб­щения асинхронно.

 

QueueBrowser

При использовании QueueReceiver для получения сообщений, сообщения удаляются по мере своей обработки. В отличие от QueueReceiver, QueueBrowser просматривает сообщения в очереди, однако не удаляет их. Для этого существует метод getEnumeration( ), который возвращает перечисление java.util.Enumeration, которое может быть использовано для про­смотра сообщений в очереди.

 

MessageListener

MessageListener — интерфейс с единственным методом – onMessage(Message), - кото­рый обеспечивает асинхронный прием и обработку сообщений. Интерфейс должен быть реа­лизован клиентским классом, объекты которого могут передаваться в метод setMessageListe­ner(MessageListener) объектов QueueReceiver. Как только сообщение приходит в очередь, вызывается метод onMessage(Message).

Объекты MessageListener используются в обеих моделях передачи сообщений.

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