Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье объясняется, как использовать популярный Java Message Service (JMS) 2.0 API для взаимодействия с Сервисной Шиной Azure по протоколу расширенной очереди сообщений (AMQP) 1.0.
Важные заметки
- Для поддержки API JMS 2.0 требуется уровень Служебная шина Azure Premium и библиотека azure-servicebus-jms . Использование других библиотек JMS (например, qpid-jms-client напрямую) к пространству имен класса Premium приводит к поведению JMS 1.1, а некоторые функции JMS 2.0 могут не работать должным образом.
- Библиотека является открытым исходным кодом и построена на основе Qpid-jms-client — все API-интерфейсы qpid-jms-client работают с ним, поэтому блокировка поставщика отсутствует. Он также предоставляет значения по умолчанию для политик предварительной выборки, политик повторного подключения, идентификатора Microsoft Entra, поддержки управляемого удостоверения и автоматического удаления при простое.
- Библиотека доступна в двух вариантах для Jakarta EE и Java EE. См. раздел о поддержке Jakarta EE и javax для получения сведений о том, какие артефакты использовать.
Поддержка Jakarta EE и javax
Библиотека azure-servicebus-jms доступна в двух вариантах для поддержки как Java EE (javax.jms), так и более нового пространства имен API Jakarta EE (jakarta.jms).
| Пространство имен API | Артефакт Maven | Версии | Спецификация JMS |
|---|---|---|---|
jakarta.jms (Джакарта EE 9+) |
com.azure:azure-servicebus-jms | 2.0.0 и выше | Jakarta Messaging (JMS 2.0) |
javax.jms(Java EE) |
com.microsoft.azure:azure-servicebus-jms | 1.0.x | JMS 2.0 |
Какой артефакт следует использовать?
Если проект использует Jakarta EE 9 или более поздней версии (например, Spring Boot 3.x, Quarkus 3.x или любую платформу
jakarta.jms.*, которая импортируетcom.azure), используйте артефакт:<dependency> <groupId>com.azure</groupId> <artifactId>azure-servicebus-jms</artifactId> <version>2.1.0</version> </dependency>Если ваш проект по-прежнему использует Java EE (импорт
javax.jms.*), продолжайте использовать артефактcom.microsoft.azure:<dependency> <groupId>com.microsoft.azure</groupId> <artifactId>azure-servicebus-jms</artifactId> <version>1.0.2</version> </dependency>
Внимание
Не смешивайте два артефакта. Использование com.azure:azure-servicebus-jms в проекте, который импортирует javax.jms.*, приводит к ошибкам компиляции, и наоборот.
Миграция из Javax в Джакарту
Если вы обновляете приложение с Java EE до Jakarta EE:
- Замените идентификатор группы зависимостей Maven на
com.microsoft.azurecom.azureи обновите версию до2.0.0или более поздней версии. - Обновите все
javax.jms.*импорт в вашем коде наjakarta.jms.*. -
ServiceBusJmsConnectionFactoryAPI и конфигурация остаются одинаковыми в обоих вариантах, поэтому изменения кода не требуются за пределами обновлений импорта и зависимостей.
Предварительные условия
Начните работу с шиной сообщений
В этом руководстве предполагается, что у вас уже есть пространство имен для служебная шина. Если вы еще не сделали этого, создайте пространство имен и очередь с помощью портал Azure. Дополнительные сведения о создании пространства имен и очередей Служебной шины см. в статье о начале работы с очередями Служебной шины на портале Azure.
Настройка среды разработки Java
Для разработки приложений Java необходимо настроить соответствующую среду разработки.
- Должен быть установлен JDK (комплект SDK для Java) или JRE (среда выполнения Java).
- JDK или JRE добавляется в путь сборки и соответствующие системные переменные.
- Для использования JDK или JRE устанавливается Java IDE. Например, Eclipse или IntelliJ.
Чтобы узнать больше о том, как подготовить среду разработки для Java в Azure, используйте это руководство.
Функции, поддерживаемые JMS
В следующей таблице перечислены функции службы сообщений Java (JMS), поддерживаемые в настоящее время служебной шиной Azure. Она также показывает функции, которые не поддерживаются.
| Функция | API (интерфейс программирования приложений) | Состояние |
|---|---|---|
| Очереди |
|
Поддерживается |
| Темы |
|
Поддерживается |
| Временные очереди |
|
Поддерживается |
| Временные темы |
|
Поддерживается |
| Создатель сообщений / JMSProducer |
|
Поддерживается |
| Браузеры очередей |
|
Поддерживается |
| Потребитель сообщения/ JMSConsumer |
noLocal в настоящее время не поддерживается |
Поддерживается |
| общие устойчивые подписки; |
|
Поддерживается |
| Устойчивые неразделяемые подписки |
noLocal в настоящее время не поддерживается, это значение следует установить в "false" |
Поддерживается |
| общие неустойчивые подписки; |
|
Поддерживается |
| Неделимые неустойчивые подписки |
noLocal в настоящее время не поддерживается, это значение следует установить в "false" |
Поддерживается |
| Селекторы сообщений | Зависит от созданного потребителя. Селекторы служебная шина не поддерживают ключевые слова "LIKE" и "BETWEEN". | Поддерживается |
| Задержка доставки (запланированные сообщения) |
|
Поддерживается |
| Создание сообщения |
|
Поддерживается |
| Транзакции между сущностями |
|
Поддерживается |
| Распределенные транзакции | Не поддерживается |
Скачивание клиентской библиотеки службы сообщений Java (JMS)
Чтобы использовать все функции, доступные на уровне "Премиум", добавьте библиотеку azure-servicebus-jms в путь сборки проекта. Этот пакет предоставляет необходимые значения по умолчанию, такие как значения политики предварительной выборки, политики повторного подключения, идентификатор Microsoft Entra и поддержка управляемого удостоверения из поля. Выберите артефакт, соответствующий пространству имен API проекта (см. сведения о поддержке Jakarta EE и javax ):
Jakarta EE (jakarta.jms):
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-servicebus-jms</artifactId>
<version>2.1.0</version>
</dependency>
Java EE (javax.jms):
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-servicebus-jms</artifactId>
<version>1.0.2</version>
</dependency>
Примечание.
Чтобы добавить библиотеку в путь сборки, используйте предпочитаемое средство управления зависимостями для проекта, например Maven или Gradle.
Создание приложений Java
После импорта зависимостей приложения Java могут быть записаны в не зависящий от поставщика JMS способ.
Подключение к Служебной шине Azure с помощью JMS
Для подключения к Служебной шине Azure с помощью клиентов JMS необходима строка подключения, которая доступна на портале Azure в разделе Первичная строка подключения в Политиках общего доступа.
Создайте экземпляр
ServiceBusJmsConnectionFactorySettings.ServiceBusJmsConnectionFactorySettings connFactorySettings = new ServiceBusJmsConnectionFactorySettings(); connFactorySettings.setConnectionIdleTimeoutMS(20000);Создайте экземпляр
ServiceBusJmsConnectionFactoryс соответствующим параметромServiceBusConnectionString.String ServiceBusConnectionString = "<SERVICE_BUS_CONNECTION_STRING_WITH_MANAGE_PERMISSIONS>"; ConnectionFactory factory = new ServiceBusJmsConnectionFactory(ServiceBusConnectionString, connFactorySettings);Используйте
ConnectionFactoryдля созданияConnection, а затем и для созданияSessionConnection connection = factory.createConnection(); Session session = connection.createSession();или
JMSContext(для клиентов JMS 2.0).JMSContext jmsContext = factory.createContext();Внимание
Хотя аналогичное название, JMS "Сеанс" и служебная шина "Сеанс" полностью не зависят друг от друга.
В JMS 1.1 Session является основным строительным блоком API, который позволяет создавать
MessageProducer,MessageConsumer, а также самMessage. Дополнительные сведения см. в обзоре по модели программирования JMS API.В служебной шине сеансы являются конструкцией как на стороне службы, так и клиента, чтобы обеспечить обработку FIFO в очередях и подписках.
Написание приложения JMS
После создания экземпляра Session или JMSContext можно использовать знакомые API JMS для выполнения операций управления и данных в вашем приложении. Сведения о поддерживаемых интерфейсах API см. в списке функций, поддерживаемых JMS. Ниже приведены некоторые фрагменты кода для начала работы с JMS .
Отправка сообщений в очередь и раздел
// Create the queue and topic
Queue queue = jmsContext.createQueue("basicQueue");
Topic topic = jmsContext.createTopic("basicTopic");
// Create the message
Message msg = jmsContext.createMessage();
// Create the JMS message producer
JMSProducer producer = jmsContext.createProducer();
// send the message to the queue
producer.send(queue, msg);
// send the message to the topic
producer.send(topic, msg);
Получение сообщений из очереди
// Create the queue
Queue queue = jmsContext.createQueue("basicQueue");
// Create the message consumer
JMSConsumer consumer = jmsContext.createConsumer(queue);
// Receive the message
Message msg = (Message) consumer.receive();
Получение сообщений из долговременной разделяемой подписки на тему
// Create the topic
Topic topic = jmsContext.createTopic("basicTopic");
// Create a shared durable subscriber on the topic
JMSConsumer sharedDurableConsumer = jmsContext.createSharedDurableConsumer(topic, "sharedDurableConsumer");
// Receive the message
Message msg = (Message) sharedDurableConsumer.receive();
Итоги
В этом руководстве демонстрируется, как клиентские приложения Java, использующие службу сообщений Java (JMS) через AMQP 1.0, могут взаимодействовать со Служебной шиной Azure.
Протокол AMQP 1.0 служебная шина можно также использовать из других языков, в числе которых .NET, C, Python и PHP. Компоненты, созданные с помощью этих языков, могут надежно и точно обмениваться сообщениями, используя AMQP 1.0 в служебная шина.