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

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

Примечание

Поддержка API java Message Service (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( строка queueName)
Поддерживается
Разделы
  • JMSContext.createTopic( строка topicName)
Поддерживается
Временные очереди
  • JMSContext.createTemporaryQueue()
Поддерживается
Временные разделы
  • JMSContext.createTemporaryTopic()
Поддерживается
Создатель сообщений /
JMSProducer
  • JMSContext.createProducer()
Поддерживается
Браузеры очередей
  • JMSContext.createBrowser(Queue queue)
  • JMSContext.createBrowser(Queue queue, строка messageSelector)
Поддерживается
Получатель сообщений/
JMSConsumer
  • JMSContext.createConsumer( Destination destination)
  • JMSContext.createConsumer( Destination destination, строка messageSelector)
  • JMSContext.createConsumer( Destination destination, строка messageSelector, логическая величина noLocal)

noLocal в настоящее время не поддерживается
Поддерживается
Общие устойчивые подписки
  • JMSContext.createSharedDurableConsumer(Topic topic, строка name)
  • JMSContext.createSharedDurableConsumer(Topic topic, строка name, строка messageSelector)
Поддерживается
Необщие устойчивые подписки
  • JMSContext.createDurableConsumer(Topic topic, строка name)
  • createDurableConsumer(Topic topic, строка name, строка messageSelector, логическая величина noLocal)

noLocal в настоящее время не поддерживается, для этой величины следует задать значение "false"
Поддерживается
Общие неустойчивые подписки
  • JMSContext.createSharedConsumer(Topic topic, строка sharedSubscriptionName)
  • JMSContext.createSharedConsumer(Topic topic, строка sharedSubscriptionName, строка messageSelector)
Поддерживается
Необщие неустойчивые подписки
  • JMSContext.createConsumer(Destination destination)
  • JMSContext.createConsumer( Destination destination, строка messageSelector)
  • JMSContext.createConsumer( Destination destination, строка messageSelector, логическая величина 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( строка text)
Поддерживается
Транзакции между объектами
  • Connection.createSession(true, Session.SESSION_TRANSACTED)
Поддерживается
Распределенные транзакции Не поддерживается

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

Чтобы использовать все функции, доступные на уровне "Премиум", добавьте следующую библиотеку в путь сборки проекта.

Azure-servicebus-jms

Примечание

Чтобы добавить 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, 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.

Дальнейшие действия

Ознакомьтесь с дополнительными сведениями о служебной шине Microsoft Azure и сущностях Java Message Service (JMS):