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


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

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

Примечание.

Поддержка API службы сообщений Java (JMS) 2.0 доступна только на уровне "Премиум".>

Необходимые компоненты

Приступая к работе со служебной шиной

В этом руководстве предполагается, что у вас уже есть пространство имен Служебной шины. Если вы этого не сделали, создайте пространство имен и очередь с помощью портал 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(очередь очереди)
  • JMSContext.createBrowser(Очередь, Строка messageSelector)
Поддерживается
Потребитель сообщения/
JMSConsumer
  • JMSContext.createConsumer(назначение назначения)
  • JMSContext.createConsumer(назначение назначения, string messageSelector)
  • JMSContext.createConsumer( Destination destination, строка 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(назначение назначения)
  • JMSContext.createConsumer(назначение назначения, string messageSelector)
  • JMSContext.createConsumer( назначение назначения, String messageSelector, boolean noLocal)

noLocal в настоящее время не поддерживается, для этой величины следует задать значение "false"
Поддерживается
Селекторы сообщений зависит от созданного получателя Поддерживается
Delivery Delay (запланированные сообщения)
  • JMSProducer.setDeliveryDelay(long 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 ИД и поддержка управляемого удостоверения из поля.

Примечание.

Чтобы добавить 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();
    

    Внимание

    Несмотря на аналогичное наименование Session JMS и Session Служебной шины, эти сеансы полностью независимы друг от друга.

    В JMS 1.1 сеанс является важным стандартным блоком API, который позволяет создавать MessageProducerи MessageConsumerMessage сам интерфейс. Дополнительные сведения см. в учебнике по модели программирования 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.