Java Platform, Enterprise Edition (Java EE) 8
Учебник по Java EE

Назад Вперёд Содержание

Обзор JMS API

Этот обзор определяет концепцию обмена сообщениями, описывает JMS API и где его можно использовать, а также объясняет, как JMS API работает в платформе Java EE.

Здесь рассматриваются следующие темы:

Что такое обмен сообщениями?

Обмен сообщениями — это метод связи между программными компонентами или приложениями. Система обмена сообщениями является одноранговым средством: клиент обмена сообщениями может отправлять сообщения и получать сообщения от любого другого клиента. Каждый клиент подключается к агенту обмена сообщениями, который предоставляет средства для создания, отправки, получения и чтения сообщений.

Обмен сообщениями обеспечивает распределённое слабосвязное взаимодействие. Компонент отправляет сообщение в пункт назначения, и получатель может извлечь сообщение из пункта назначения. Слабосвязным взаимодействие делает то обстоятельство, что пункт назначения — это единственное, что есть общего между отправителем и получателем. Отправитель и получатель не обязаны быть доступны для связи одновременно. Фактически, отправитель может ничего не знать о получателе. Получатель также ничего не обязан знать об отправителе. Отправитель и получатель должны знать, какой формат сообщения и пункт назначения использовать. В этом отношении обмен сообщениями отличается от сильносвязных технологий, таких как Remote Method Invocation (RMI), которые требуют от приложения знания методов удалённого приложения.

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

Что такое JMS API?

Сервис сообщений Java — это API Java, который позволяет приложениям создавать, отправлять, получать и читать сообщения. JMS API определяет общий набор интерфейсов и связанную семантику, которые позволяют программам Java взаимодействовать с другими реализациями обмена сообщениями.

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

JMS обеспечивает взаимодействие, которое не только слабосвязно, но и

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

  • надёжно: поставщик сообщений, который реализует JMS API, может гарантировать, что сообщение доставляется один и только один раз. Более низкие уровни надёжности доступны для приложений, которые могут позволить пропустить сообщения или получать дубликаты сообщений.

Текущая версия спецификации JMS — версия 2.0. Вы можете загрузить копию спецификации с веб-сайта Java Community Process: http://www.jcp.org/en/jsr/detail?id=343.

Когда вы можете использовать JMS API?

Поставщик корпоративных приложений может выбрать API обмена сообщениями вместо сильносвязного API, такого как удалённый вызов процедур (RPC), при следующих обстоятельствах.

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

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

  • Бизнес-модель приложения позволяет компоненту отправлять информацию другому и продолжать работу без получения немедленного ответа.

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

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

  • Компонент фабрики может отправить сообщение компонентам деталей, чтобы завод мог скомпоновать необходимые детали.

  • Компоненты деталей, в свою очередь, могут отправлять сообщения в свои компоненты инвентаризации и заказа, чтобы тем самым пополнять свои запасы и заказывать материалы у поставщиков.

  • Компоненты учёта и деталей могут отправлять сообщения в компонент учёта для обновления номеров счетов бухучёта.

  • Компания может публиковать обновлённые каталоги продукции в своих отделах продаж.

Использование обмена сообщениями в этих задачах позволяет различным компонентам эффективно взаимодействовать друг с другом без привязки к сети и другим ресурсам. Рисунок 48-1 иллюстрирует, как может работать этот простой пример.

Рис. 48-1. Обмен сообщениями в корпоративном приложении

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

Производство — это только один пример того, как предприятие может использовать JMS API. Обмен сообщениями может быть успешно использован в приложениях розничной торговли, финансовых услуг, служб здравоохранения и многих других.

Как JMS API работает с платформой Java EE?

Когда JMS API был впервые представлен, его наиболее важной целью было предоставить приложениям Java доступ к существующим системам промежуточного программного обеспечения, ориентированного на обмен сообщениями (messaging-oriented middleware — MOM). С тех пор многие производители ПО приняли и реализовали JMS API, поэтому продукт JMS теперь может предоставить полную возможность обмена сообщениями для предприятия.

JMS API является неотъемлемой частью платформы Java EE, и разработчики приложений могут использовать обмен сообщениями с компонентами Java EE. JMS 2.0 входит в состав Java EE 8.

JMS API в платформе Java EE имеет следующие функции.

  • Клиентские приложения, компоненты Enterprise JavaBeans (EJB) и веб-компоненты могут отправлять или синхронно получать сообщения JMS. Кроме того, клиентские приложения могут установить слушатель сообщений, который позволяет асинхронно доставлять сообщения JMS, уведомляя о доступности сообщения.

  • Бины, управляемые сообщениями, являются разновидностью Enterprise-бинов и обеспечивают асинхронное получение сообщений в контейнере EJB. Сервер приложений обычно объединяет управляемые сообщениями бины в пулы для совместной обработки ими сообщений.

  • Операции отправки и получения сообщений могут быть частью транзакций Java Transaction API (JTA), что позволяет операциям JMS и операциям с базой данных осуществляться в одной транзакции.

JMS API расширяет другие части платформы Java EE, упрощая промышленную разработку, обеспечивая слабосвязанное надёжное асинхронное взаимодействие между компонентами Java EE и информационными системами, способными обмениваться сообщениями. Разработчик может легко добавить новое поведение в приложение Java EE с существующими бизнес-событиями, добавив новый управляемый событиями компонент для работы с конкретными бизнес-событиями. Более того, платформа Java EE расширяет JMS API, обеспечивая поддержку транзакций JTA и позволяя одновременно использовать сообщения. Для получения дополнительной информации см. Спецификацию Enterprise JavaBeans, v3.2.

Провайдер JMS может быть интегрирован с сервером приложений с использованием архитектуры Java EE Connector. Вы получаете доступ к провайдеру JMS через адаптер ресурсов. Эта возможность позволяет производителям ПО создавать провайдеров JMS, которые можно подключить к нескольким серверам приложений, и позволяет серверам приложений поддерживать несколько провайдеров JMS. Для получения дополнительной информации см. Спецификацию Java EE Connector architecture, v1.7.


Назад Вперёд Содержание
Логотип Oracle  Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены. Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)