Руководство разработчика JMS 2.0 для служебной шины Microsoft Azure

В этом руководстве содержатся подробные сведения, которые помогут вам наладить взаимодействие со служебной шиной Microsoft Azure с помощью API Java Message Service (JMS) 2.0.

В качестве разработчика Java, если вы не знакомы с Служебная шина Azure, рассмотрите возможность ознакомиться со следующими статьями.

Начало работы Основные понятия

Модель программирования JMS

Модель программирования API службы сообщений Java, как показано в следующих разделах:

Примечание.

Служебная шина Microsoft Azure уровня "Премиум" поддерживает JMS 1.1 и JMS 2,0.

Служебная шина Microsoft Azure уровня "Стандартный" поддерживает JMS 1.1 с ограниченной функциональностью. Дополнительные сведения см. в документации.

Стандартные блоки JMS

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

Примечание.

Приведенное ниже руководство представляет собой адаптированный вариант раздела учебника по Oracle Java EE 6, посвященного Java Message Service (JMS).

Этот учебник рекомендуется использовать для лучшего понимания Java Message Service (JMS).

Фабрика подключений

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

Каждая фабрика подключений является экземпляром ConnectionFactoryили QueueConnectionFactoryTopicConnectionFactory интерфейсом.

Чтобы упростить подключение с помощью Служебная шина Azure, эти интерфейсы реализуются с помощью ServiceBusJmsConnectionFactoryили ServiceBusJmsQueueConnectionFactoryServiceBusJmsTopicConnectionFactory соответственно.

Внимание

Приложения Java, использующие API JMS 2.0, могут подключаться к Служебная шина Azure с помощью строка подключения или использовать TokenCredential для использования резервной проверки подлинности Microsoft Entra. При использовании резервной проверки подлинности Microsoft Entra убедитесь, что необходимо назначить роли и разрешения для удостоверения.

Создайте управляемое удостоверение, назначаемое системой в Azure, и используйте это удостоверение для создания TokenCredential.

TokenCredential tokenCredential = new DefaultAzureCredentialBuilder().build();

Затем фабрику Подключение ion можно создать с помощью приведенных ниже параметров.

  • Учетные данные токена— представляет учетные данные, способные предоставлять маркер OAuth.
  • Узел — имя узла пространства имен уровня "Премиум" Служебная шина Azure.
  • ServiceBusJms Подключение ionFactory Параметры контейнер свойств, содержащий
    • connectionIdleTimeoutMS — время ожидания для бездействующих подключений в миллисекундах;
    • traceFrames — логический флаг, позволяющий собирать кадры трассировки AMQP для отладки;
    • другие параметры конфигурации.

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

String host = "<YourNamespaceName>.servicebus.windows.net";
ConnectionFactory factory = new ServiceBusJmsConnectionFactory(tokenCredential, host, null); 

Назначение JMS

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

Назначения сопоставляются с сущностями в служебной шине Azure: очередями (в сценариях "точка — точка") и разделами (в сценариях публикации).

Связи

Подключение инкапсулирует виртуальное подключение к поставщику JMS. С помощью Служебная шина Azure он представляет подключение с отслеживанием состояния между приложением и Служебная шина Azure через AMQP.

Подключение создается из фабрики подключений, как показано в следующем примере:

Connection connection = factory.createConnection();

Сеансы

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

Сеанс можно создать из объекта подключения, как показано в следующем примере:

Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);

Примечание.

API JMS не поддерживает получение сообщений из очередей служебной шины или разделов с включенными сеансами обмена сообщениями.

Режимы сеанса

Сеанс можно создать с использованием любого из приведенных ниже режимов.

Режимы сеанса Поведение
Session.AUTO_ACKNOWLEDGE Сеанс автоматически подтверждает получение сообщения клиентом либо при успешном возвращении сеанса из вызова для получения, либо при успешном возвращении результатов от прослушивателя сообщений, вызванного сеансом для обработки сообщения.
Session.CLIENT_ACKNOWLEDGE Клиент подтверждает потребленное сообщение, вызывая метод подтверждения сообщения.
Session.DUPS_OK_ACKNOWLEDGE Этот режим подтверждения дает сеансу команду на отложенное подтверждение доставки сообщений.
Session.SESSION_TRANSACTED Это значение может быть передано в качестве аргумента в метод createSession(int sessionMode) объекта Connection, чтобы указать, что сеанс должен использовать локальную транзакцию.

Если режим сеанса не указан, Session.AUTO_ACKNOWLEDGE выбирается по умолчанию.

JMSContext

Примечание.

JMSContext определяется как часть спецификации JMS 2.0.

JMSContext объединяет функциональные возможности, предоставляемые подключением и объектом сеанса. Его можно создать из объекта фабрики подключений.

JMSContext context = connectionFactory.createContext();

Режимы JMSContext

Как и объект Session, JMSContext можно создать с теми же режимами подтверждения, которые упоминались в разделе Режимы сеанса.

JMSContext context = connectionFactory.createContext(JMSContext.AUTO_ACKNOWLEDGE);

Если режим не указан, JMSContext.AUTO_ACKNOWLEDGE выбирается по умолчанию.

Производители сообщений JMS

Производитель сообщений — это объект, который создается с помощью объекта JMSContext или Session и используется для отправки сообщений в назначение.

Его можно создать как автономный объект, как показано в следующем примере:

JMSProducer producer = context.createProducer();

Или создается во время выполнения, когда необходимо отправить сообщение.

context.createProducer().send(destination, message);

Потребители сообщений JMS

Потребитель сообщений — это объект, который создается с помощью объекта JMSContext или Session и используется для получения сообщений, отправленных в назначение. Его можно создать, как показано в этом примере:

JMSConsumer consumer = context.createConsumer(dest);

Синхронное получение с помощью метода receive()

Потребитель сообщений обеспечивает синхронный способ получения сообщений от назначения с помощью метода receive().

Если аргументы и время ожидания не заданы или задано время ожидания "0", то потребитель блокируется на неопределенное время, пока не придет сообщение или подключение не будет разорвано (в зависимости от того, что произойдет раньше).

Message m = consumer.receive();
Message m = consumer.receive(0);

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

Message m = consumer.receive(1000); // time out after one second.

Асинхронное получение с помощью прослушивателей сообщений JMS

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

Экземпляр объекта прослушивателя сообщений должен быть создан и зарегистрирован для конкретного потребителя сообщений с помощью метода setMessageListener.

Listener myListener = new Listener();
consumer.setMessageListener(myListener);

Потребление сообщений из разделов

Потребители сообщений JMS создаются для назначения, который может быть очередью или разделом.

Потребители для очередей — это просто объекты на стороне клиента, которые находятся в контексте Session (и Connection) между клиентским приложением и служебной шиной Azure.

Однако потребители для разделов состоят из двух следующих частей:

  • объект на стороне клиента, который находится в контексте Session (или JMSContext);
  • подписка, которая является сущностью служебной шины Azure.

Подписки описаны здесь и могут быть одним из следующих:

  • общие устойчивые подписки;
  • общие неустойчивые подписки;
  • Устойчивые подписки без общего доступа
  • Необщие неустойчивые подписки

Обозреватели очереди JMS

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

Браузер очереди можно создать с помощью JMSContext, как показано в следующем примере:

QueueBrowser browser = context.createBrowser(queue);

Примечание.

В API JMS не предусмотрены средства для просмотра разделов.

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

Селекторы сообщений JMS

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

Селекторы можно использовать при создании любого из следующих потребителей:

  • общая устойчивая подписка;
  • необщая устойчивая подписка;
  • общая неустойчивая подписка;
  • необщая неустойчивая подписка;
  • обозреватель очереди.

Расположение AMQP и сопоставление операции служебной шины

Вот как расположение AMQP преобразовывается в операцию Служебной шины:

ACCEPTED = 1; -> Complete()
REJECTED = 2; -> DeadLetter()
RELEASED = 3; (just unlock the message in service bus, will then get redelivered)
MODIFIED_FAILED = 4; -> Abandon() which increases delivery count
MODIFIED_FAILED_UNDELIVERABLE = 5; -> Defer()

Итоги

В этом руководстве поясняется, как клиентские приложения Java, использующие Java Message Service (JMS), могут подключаться к служебной шине Azure.

Следующие шаги

Дополнительные сведения о проверка сущностях службы сообщений Java (JMS) Служебная шина Azure см. в следующих статьях: