Опубликован: 10.10.2010 | Уровень: специалист | Доступ: платный
Лекция 13:

Использование JMS

Аннотация: В лекции дается краткий обзор технологии JMS. Приводится пример приложения, использующего эту технологию

Рабочий каталог расположен в Practice.

JMS является еще одной технологией создания распределенных приложений, основанных на модели обмена сообщениями.

Введение

JMS (Java Messaging System) представляет собой интерфейс к внешним системам, ориентированный на работу через сообщения. JMS является "старой" технологией - первая спецификация была опубликована в 1998 г. В настоящее время пакет javax.jms входит в комплект jdk, а Sun Application Server реализует поддержку JMS в качестве одного из сервисов.

При разработке JMS в качестве основной задачи рассматривалось создание обобщенного Java API для приложений, ориентированных на работу с сообщениями ( message-oriented application programming ), и обеспечение независимости от конкретных реализаций соответствующих служб обработки сообщений.

Таким образом, программа, написанная с использованием JMS, будет корректно работать с любой системой сообщений, поддерживающей эту спецификацию (или имеющую соответствующие интерфейсы).

Поскольку JMS является лишь оболочкой, или интерфейсом, описывающей доступные для приложения методы, для работы приложения понадобится определенная реализация этих интерфейсов JMS, называемая провайдером JMS. Они создаются независимыми производителями, и в настоящее время таких реализаций существует достаточно много (в том числе, например, реализация, включенная в Sun Application Server и распространяемая вместе с J2EE, а также MQSeries от IBM, служба JMS WebLogic от BEA, SonicMQ от Progress и другие).

Модель обмена сообщениями (и JMS ) удобно использовать в том случае, если распределенное приложение обладает следующими характеристиками:

  • взаимодействие между компонентами является асинхронным;
  • информация (сообщение) должна передаваться нескольким или даже всем компонентам системы (семантика передачи от одного ко многим);
  • передаваемая информация используется многими внешними системами, часть из которых неизвестна на момент проектирования системы или интерфейсы которых подвержены частым изменениям (концепция ESB - Enterprise Service Bus );
  • обменивающиеся информацией (сообщениями) компоненты выполняются в разное время, что требует наличия посредника для промежуточного хранения переданной информации.

Архитектура JMS

Архитектура JMS выглядит следующим образом (рис. 13.1):

  • прикладные программы Java, использующие JMS, называются клиентами JMS ( JMS client );
  • система обработки сообщений, управляющая маршрутизацией и доставкой сообщений, называется JMS-провайдером ( JMS provider );
  • приложение JMS ( JMS application ) - это прикладная система, состоящая из нескольких JMS клиентов, и, как правило, одного JMS -провайдера. JMS -клиент, посылающий сообщение, называется поставщиком ( producer ). JMS -клиент, принимающий сообщение, называется потребителем ( consumer ). Один и тот же JMS -клиент может быть одновременно и поставщиком, и потребителем в разных актах взаимодействия;
  • сообщения ( Messages ) - это объекты, передающиеся и принимающиеся компонентами (клиентами JMS );
  • средства администрирования ( Administrative tools ) - средства управления ресурсами, использующимися клиентами.
Архитектура JMS

Рис. 13.1. Архитектура JMS

JMS предоставляет два подхода к передаче сообщений. Первый называется "издание-подписка" ( publish an subscribe ) (рис. 13.3) и используется в том случае, если сообщение, отправленное одним клиентом, должно быть получено несколькими.

Второй подход называется "точка-точка" ( point to point ) (рис. 13.2) и служит для реализации обмена сообщениями между двумя компонентами.

Спецификация JMS называет эти два подхода зонами сообщений ( messaging domains ).

Модель взаимодействия "точка-точка"

Рис. 13.2. Модель взаимодействия "точка-точка"
Модель взаимодействия "издание-подписка"

Рис. 13.3. Модель взаимодействия "издание-подписка"

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

Модель взаимодействия "издание-подписка"

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

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

Алмаз Мурзабеков
Алмаз Мурзабеков
Прохожу курс "Построение распределенных систем на Java" в третьей лекции где описывается TCPServer вылетает эта ошибка
"Connection cannot be resolved to a type"


Java version 1.7.0_05
Александр Хвостов
Александр Хвостов
Россия
Максим Лютов
Максим Лютов
Россия, СПб, Политех, 2012