Поделиться через


Использование API службы сообщений Java 2.0 со служебной шиной Azure категории "Премиум"

В этой статье объясняется, как использовать популярный Java Message Service (JMS) 2.0 API для взаимодействия с Сервисной Шиной Azure по протоколу расширенной очереди сообщений (AMQP) 1.0.

Важные заметки

Вот несколько важных моментов:

  • Поддержка API JMS 2.0 доступна только на уровне "Премиум" и при использовании библиотеки azure-servicebus-jms .
  • Если вы используете библиотеки JMS, отличные от azure-servicebus-jms (например, последней версии qpid-jms-client), для пространства имен класса Premium наблюдается поведение JMS 1.1, а некоторые функции JMS 2.0 могут не работать должным образом. Библиотека azure-servicebus-jms не создает блокировку поставщика любого вида, так как она по-прежнему принимает зависимость от qpid-jms-client. Все API, работающие с клиентом qpid-jms-client, также работают с библиотекой azure-servicebus-jms.
  • Azure-servicebus-jms также является библиотекой с открытым кодом. Библиотека azure-servicebus-jms была в основном создана, чтобы служба служебной шины могла различать между клиентами, которым требуется поведение JMS 1.1 (обратная совместимость) и поведение JMS 2.0 при работе с пространством имен премиум-класса. Библиотека azure-servicebus-jms также предоставляет некоторые необходимые значения по умолчанию, такие как политика предварительной выборки, политика повторного подключения, Microsoft Entra ID, поддержка управляемой идентичности, поддержка автоматического удаления на простое для сущностей из коробки.
  • Следующий путь к пакету azure-servicebus-jms — это последняя версия библиотеки, основанная на спецификации Jakarta Messaging (Jakarta.* API): Maven Central: com.azure:azure-servicebus-jms. И следующий путь к azure-servicebus-jms это последняя версия библиотеки до спецификации Jakarta Messaging (javax.* API): Maven Central: com.microsoft.azure:azure-servicebus-jms.

Предварительные условия

Начните работу с шиной сообщений

В этом руководстве предполагается, что у вас уже есть пространство имен для Service Bus. Если вы еще не сделали этого, создайте пространство имен и очередь с помощью портал Azure. Дополнительные сведения о создании пространства имен и очередей Служебной шины см. в статье о начале работы с очередями Служебной шины на портале Azure.

Настройка среды разработки Java

Для разработки приложений Java необходимо настроить соответствующую среду разработки.

  • Должен быть установлен JDK (комплект SDK для Java) или JRE (среда выполнения Java).
  • JDK или JRE добавляется в путь сборки и соответствующие системные переменные.
  • Для использования JDK или JRE устанавливается Java IDE. Например, Eclipse или IntelliJ.

Чтобы узнать больше о том, как подготовить среду разработки для Java в Azure, используйте это руководство.

Функции, поддерживаемые JMS

В следующей таблице перечислены функции службы сообщений Java (JMS), поддерживаемые в настоящее время служебной шиной Azure. Она также показывает функции, которые не поддерживаются.

Функция API (интерфейс программирования приложений) Состояние
Очереди
  • JMSContext.createQueue(String queueName)
Поддерживается
Темы
  • JMSContext.createTopic(String topicName)
Поддерживается
Временные очереди
  • JMSContext.createTemporaryQueue()
Поддерживается
Временные темы
  • JMSContext.createTemporaryTopic()
Поддерживается
Создатель сообщений /
JMSProducer
  • JMSContext.createProducer()
Поддерживается
Браузеры очередей
  • JMSContext.createBrowser(Queue queue)
  • JMSContext.createBrowser(Queue queue, String messageSelector)
Поддерживается
Потребитель сообщения/
JMSConsumer
  • JMSContext.createConsumer(назначение назначения)
  • JMSContext.createConsumer(Destination назначения, String messageSelector)
  • JMSContext.createConsumer( Destination destination, String messageSelector, логическое значение noLocal)

noLocal в настоящее время не поддерживается
Поддерживается
общие устойчивые подписки;
  • JMSContext.createSharedDurableConsumer(Тема, имя строки)
  • JMSContext.createSharedDurableConsumer(Тема, имя строки, строковое сообщениеSelector)
Поддерживается
Устойчивые неразделяемые подписки
  • JMSContext.createDurableConsumer(тема раздела, имя строки)
  • createDurableConsumer(Topic topic, String name, String messageSelector, boolean noLocal)

noLocal в настоящее время не поддерживается, это значение следует установить в "false"
Поддерживается
общие неустойчивые подписки;
  • JMSContext.createSharedConsumer(Тема, String sharedSubscriptionName)
  • JMSContext.createSharedConsumer(Раздел, String sharedSubscriptionName, String messageSelector)
Поддерживается
Неделимые неустойчивые подписки
  • JMSContext.createConsumer(Destination destination)
  • JMSContext.createConsumer(назначение назначения, string messageSelector)
  • JMSContext.createConsumer( назначение назначения, String messageSelector, boolean noLocal)

noLocal в настоящее время не поддерживается, и его следует установить в значение "false"
Поддерживается
Селекторы сообщений зависит от созданного потребителя Поддерживается
Задержка доставки (запланированные сообщения)
  • JMSProducer.setDeliveryDelay(долгий deliveryDelay)
Поддерживается
Создание сообщения
  • JMSContext.createMessage()
  • JMSContext.createBytesMessage()
  • JMSContext.createMapMessage()
  • JMSContext.createObjectMessage(Serializable object)
  • JMSContext.createStreamMessage()
  • JMSContext.createTextMessage()
  • JMSContext.createTextMessage(String text)
Поддерживается
Транзакции между сущностями
  • Connection.createSession(true, Session.SESSION_TRANSACTED)
Поддерживается
Распределенные транзакции Не поддерживается

Скачивание клиентской библиотеки службы сообщений Java (JMS)

Чтобы использовать все функции, доступные на уровне "Премиум", добавьте следующую библиотеку в путь сборки проекта: azure-servicebus-jms. Этот пакет предоставляет некоторые необходимые значения по умолчанию, такие как значения политики предварительной выборки, политики повторного подключения, Microsoft Entra ID и поддержка управляемого удостоверения по умолчанию.

Примечание.

Чтобы добавить azure-servicebus-jms в путь сборки, используйте предпочитаемое средство управления зависимостями для проекта, например Maven или Gradle.

Создание приложений Java

После импорта зависимостей приложения Java могут быть записаны в не зависящий от поставщика JMS способ.

Подключение к Служебной шине Azure с помощью JMS

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

  1. Создайте экземпляр ServiceBusJmsConnectionFactorySettings.

    ServiceBusJmsConnectionFactorySettings connFactorySettings = new ServiceBusJmsConnectionFactorySettings();
    connFactorySettings.setConnectionIdleTimeoutMS(20000);
    
  2. Создайте экземпляр ServiceBusJmsConnectionFactory с соответствующим параметром ServiceBusConnectionString.

    String ServiceBusConnectionString = "<SERVICE_BUS_CONNECTION_STRING_WITH_MANAGE_PERMISSIONS>";
    ConnectionFactory factory = new ServiceBusJmsConnectionFactory(ServiceBusConnectionString, connFactorySettings);
    
  3. Используйте ConnectionFactory для создания Connection, а затем и для создания Session

    Connection 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 Service Bus можно также использовать из других языков, в числе которых .NET, C, Python и PHP. Компоненты, созданные с помощью этих языков, могут надежно и точно обмениваться сообщениями, используя AMQP 1.0 в Service Bus.