Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве содержатся подробные сведения, помогающие успешно взаимодействовать с служебной шиной Azure с помощью API Java Message Service (JMS) 2.0.
Если вы не знакомы с служебной шиной Azure, ознакомьтесь со следующими статьями.
Начало работы | Концепции |
---|---|
Модель программирования службы сообщений Java (JMS)
Модель программирования API службы сообщений Java, как показано в следующих разделах:
Примечание.
Уровень "Премиум" служебной шины Azure поддерживает JMS 1.1 и JMS 2.0.
Служебная шина Azure — уровень "Стандартный " поддерживает ограниченные функциональные возможности JMS 1.1. Дополнительные сведения см. в этой документации.
JMS — стандартные блоки
Приведенные ниже стандартные блоки доступны для взаимодействия с приложением JMS.
Примечание.
Приведенное ниже руководство было адаптировано из руководства по Oracle Java EE 6 для службы сообщений Java (JMS)
В этом руководстве рекомендуется лучше понять службу сообщений Java (JMS).
Фабрика подключений
Объект фабрики подключений используется клиентом для подключения к поставщику JMS. Фабрика подключений инкапсулирует набор параметров конфигурации подключения, определенных администратором.
Каждая фабрика подключений является экземпляром ConnectionFactory
или QueueConnectionFactory
TopicConnectionFactory
интерфейсом.
Чтобы упростить подключение с служебной шиной Azure, эти интерфейсы реализуются с помощью ServiceBusJmsConnectionFactory
или ServiceBusJmsQueueConnectionFactory
ServiceBusJmsTopicConnectionFactory
соответственно.
Это важно
Приложения Java, использующие API JMS 2.0, могут подключаться к служебной шине Azure с помощью строки подключения или использовать TokenCredential
для использования поддерживаемой проверки подлинности Microsoft Entra. При использовании поддерживаемой проверки подлинности Microsoft Entra назначьте роли и разрешения для удостоверения, как требуется.
- Системно назначенное управляемое удостоверение
- Пользовательское управляемое удостоверение
- Уполномоченная служба
- Проверка подлинности строки подключения
Создайте системно назначаемую управляемую идентичность в Azure и используйте эту идентичность для создания TokenCredential
.
TokenCredential tokenCredential = new DefaultAzureCredentialBuilder().build();
Затем фабрика подключений может быть создана с помощью приведенных ниже параметров.
- Учетные данные токена — это учетные данные, способные предоставлять токен OAuth.
- Узел — имя узла пространства имен уровня "Премиум" служебной шины Azure.
- Контейнер свойств ServiceBusJmsConnectionFactorySettings, содержащий
- connectionIdleTimeoutMS — время ожидания простоя подключения в миллисекундах.
- traceFrames — логический флаг для сбора кадров трассировки AMQP для отладки.
- другие параметры конфигурации
Фабрика может быть создана, как показано здесь. Учётные данные токена и узел являются обязательными параметрами, тогда как другие свойства необязательны.
String host = "<YourNamespaceName>.servicebus.windows.net";
ConnectionFactory factory = new ServiceBusJmsConnectionFactory(tokenCredential, host, null);
Назначение JMS
Назначение — это объект, который клиент использует для указания целевого объекта сообщений, которые он создает, и источника потребляемых сообщений.
Назначения соответствуют сущностям в Azure Service Bus — очереди (в сценариях 'точка-точка') и топики (в сценариях pub-sub).
Связи
Соединение инкапсулирует виртуальное соединение с поставщиком услуг 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 или сеанса, который используется для отправки сообщений в место назначения.
Его можно создать как автономный объект, как показано в следующем примере:
JMSProducer producer = context.createProducer();
Или создается во время выполнения, когда необходимо отправить сообщение.
context.createProducer().send(destination, message);
Потребители сообщений JMS
Потребитель сообщения — это объект, созданный JMSContext или сеансом, который используется для получения сообщений, отправленных в место назначения. Его можно создать, как показано в этом примере:
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 создаются для назначения, который может быть очередью или разделом.
Потребители в очередях — это просто клиентские объекты, которые живут в контексте сеанса (и подключения) между клиентским приложением и служебной шиной Azure.
Несмотря на темы, потребители разделяются на 2 части -
- Клиентский объект, который живет в контексте Session(или JMSContext) и
- Подписка, которая является сущностью в Сервисной шине Azure.
Подписки описаны здесь и могут быть одними из следующих:
- общие устойчивые подписки;
- общие неустойчивые подписки;
- Неразделяемые устойчивые подписки
- Необщие неустойчивые подписки
Браузеры очередей JMS
API JMS предоставляет QueueBrowser
объект, позволяющий приложению просматривать сообщения в очереди и отображать значения заголовков для каждого сообщения.
Браузер очереди можно создать с помощью JMSContext, как показано в следующем примере:
QueueBrowser browser = context.createBrowser(queue);
Примечание.
API JMS не предоставляет API для просмотра раздела.
Это связано с тем, что сам раздел не сохраняет сообщения. Как только сообщение отправляется в раздел, оно перенаправляется в соответствующие подписки.
Селекторы сообщений JMS
Селекторы сообщений можно использовать приложениями-получателями для фильтрации получаемых сообщений. С помощью селекторов сообщений принимающее приложение выгружает работу фильтрации сообщений поставщику JMS (в данном случае служебная шина Azure) вместо того, чтобы взять на себя эту ответственность.
Селекторы можно использовать при создании любого из следующих потребителей.
- Общая устойчивая подписка
- Несоотделенные устойчивые подписки
- Общая непостоянная подписка
- Неразделяемая кратковременная подписка
- Потребитель очереди
- Браузер очередей
Примечание.
Селекторы Service Bus не поддерживают ключевые слова "LIKE" и "BETWEEN".
Сопоставление управления AMQP и операций шины служб
Вот как распоряжение AMQP преобразуется в операцию Service Bus:
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 (JMS) могут подключаться к служебной шине Azure.
Дальнейшие действия
Дополнительные сведения о сущностях Службы сообщений Java (JMS) и служебной шине Azure см. в следующих статьях:
- Шина сервисов — очереди, топики и подписки
- Служебная шина — сущности службы сообщений Java
- Поддержка AMQP 1.0 в служебной шине Azure
- Руководство разработчика служебной шины AMQP 1.0
- Начало работы с очередями Service Bus
- API службы сообщений Java (внешний документ Oracle)
- Узнайте, как выполнить миграцию с ActiveMQ на служебную шину