Использование Служебная шина Azure с JMS

В этой статье описывается, как использовать Служебная шина Azure с API JMS, интегрированным в платформу Spring JMS.

Основные функции

Подключение без пароля

Подключение без пароля использует проверку подлинности Microsoft Entra для подключения к службам Azure без хранения учетных данных в приложении, его файлах конфигурации или в переменных среды. Аутентификация Microsoft Entra — это механизм подключения к Служебная шина Azure с использованием удостоверений, определенных в Microsoft Entra ID. С помощью аутентификации Microsoft Entra вы можете управлять служебная шина и другими службами Microsoft в одном месте, что упрощает управление разрешениями.

Принцип работы

Spring Cloud Azure сначала создает один из следующих типов учетных данных в зависимости от конфигурации проверки подлинности приложения:

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential

Если ни один из этих типов учетных данных не найден, для получения учетных данных из свойств приложения, переменных среды, управляемой идентификации или IDE используется цепочка учетных данных через DefaultTokenCredential. Дополнительные сведения см. в разделе Spring Cloud Azure authentication.

Настройка зависимостей

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

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter-servicebus-jms</artifactId>
</dependency>

Конфигурация

В следующей таблице описываются настраиваемые свойства при использовании поддержки Spring JMS:

Свойство Описание
spring.jms.servicebus.connection-string Строка подключения к Служебная шина Azure, если вы хотите указать строку подключения напрямую.
spring.jms.servicebus.topic-client-id Идентификатор клиента JMS. Работает только для topicJmsListenerContainerFactory боба.
spring.jms.servicebus.enabled Значение, указывающее, следует ли включить автоматическую настройку JMS служебная шина. Значение по умолчанию — true.
spring.jms.servicebus.idle-timeout Длительность ожидания простоя подключения, указывающая, сколько времени клиент ожидает, что служебная шина поддерживать подключение, если сообщения не доставляются. Значение по умолчанию — 2m.
spring.jms.servicebus.passwordless-enabled Следует ли включить аутентификацию без пароля для Служебная шина Azure JMS. Значение по умолчанию — false.
spring.jms.servicebus.pricing-tier Ценовая категория Служебная шина Azure. Поддерживаемые значения: premium и standard. Уровень "Премиум" использует Java службу сообщений (JMS) 2.0, а уровень "Стандартный" использует JMS 1.1 для взаимодействия с Служебная шина Azure.
spring.jms.servicebus.listener.reply-pub-sub-domain Значение, указывающее, является ли тип назначения ответа темой. Работает только для topicJmsListenerContainerFactory боба.
spring.jms.servicebus.listener.phase Этап запуска и остановки этого контейнера.
spring.jms.servicebus.listener.reply-qos-settings Настраивает QosSettings для использования при отправке ответа.
spring.jms.servicebus.listener.subscription-durable Значение, указывающее, следует ли сделать подписку устойчивой. Работает только для topicJmsListenerContainerFactory боба. Значение по умолчанию — true.
spring.jms.servicebus.listener.subscription-shared Значение, указывающее, следует ли предоставлять общий доступ к подписке. Работает только для topicJmsListenerContainerFactory боба.
spring.jms.servicebus.pool.block-if-full Значение, указывающее, следует ли блокировать запрос соединения, если пул заполнен. Установите значение false, чтобы вместо этого вызвать JMSException.
spring.jms.servicebus.pool.block-if-full-timeout Период блокировки перед генерацией исключения, если пул всё ещё заполнен.
spring.jms.servicebus.pool.enabled Значение, указывающее, следует ли создавать JmsPoolConnectionFactory вместо обычного ConnectionFactory.
spring.jms.servicebus.pool.idle-timeout Время ожидания простоя пула подключений.
spring.jms.servicebus.pool.max-connections Максимальное количество подключений в пуле.
spring.jms.servicebus.pool.max-sessions-per-connection Максимальное количество сеансов, объединённых в пул, для каждого подключения.
spring.jms.servicebus.pool.time-between-expiration-check Интервал ожидания между запусками потока удаления неактивных соединений. Если значение отрицательное, поток удаления неактивных подключений не запускается.
spring.jms.servicebus.pool.use-anonymous-producers Значение, указывающее, нужно ли использовать только один анонимный экземпляр MessageProducer. Установите для него значение false, чтобы создать один MessageProducer каждый раз, когда требуется.
spring.jms.servicebus.prefetch-policy.all Значение по умолчанию для параметра предварительной выборки в этом пространстве имен служебная шина. Значение по умолчанию — 0.
spring.jms.servicebus.prefetch-policy.durable-topic-prefetch Количество предварительных выборок для устойчивой темы. Значение по умолчанию — 0.
spring.jms.servicebus.prefetch-policy.queue-browser-prefetch Количество предварительной выборки для браузера очередей. Значение по умолчанию — 0.
spring.jms.servicebus.prefetch-policy.queue-prefetch Количество предварительной выборки для очереди. Значение по умолчанию — 0.
spring.jms.servicebus.prefetch-policy.topic-prefetch Количество предварительных выборок для раздела. Значение по умолчанию — 0.

Заметка

Общая конфигурация Spring JMS для краткости опущена.

Дополнительные сведения см. в Spring JMS Document.

Базовое использование

Подключение к Служебная шина Azure JMS без использования пароля

Настройте следующие свойства в файле application.yml:

spring:
  jms:
    servicebus:
      namespace: ${AZURE_SERVICEBUS_NAMESPACE}
      pricing-tier: ${PRICING_TIER}
      passwordless-enabled: true

Важно

Служебная шина Azure JMS поддерживает использование Microsoft Entra ID для авторизации запросов к служебная шина ресурсам. При использовании Microsoft Entra ID убедитесь, что учетной записи Microsoft Entra, которую вы используете в данный момент, назначена роль Служебная шина Azure Data Owner. Дополнительные сведения см. в разделе Назначение ролей Azure с помощью портала Azure.

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

  1. Чтобы использовать управляемую идентификацию, включите управляемую идентификацию для вашей службы и назначьте роль Служебная шина Azure Data Owner. Дополнительные сведения см. в разделе Аутентификация управляемого удостоверения с помощью Microsoft Entra ID для доступа к ресурсам Служебная шина Azure.

  2. Настройте следующие свойства в файле application.yml:

    spring:
      cloud:
        azure:
          credential:
            managed-identity-enabled: true
      jms:
        servicebus:
          namespace: ${AZURE_SERVICEBUS_NAMESPACE}
          pricing-tier: ${PRICING_TIER}
          passwordless-enabled: true
    

    Важно

    Если вы используете управляемое удостоверение, назначаемое пользователем, также необходимо добавить свойство spring.cloud.azure.credential.client-id с идентификатором клиента управляемого удостоверения, назначаемого пользователем.

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

Добавьте следующие свойства, и всё готово.

spring:
  jms:
    servicebus:
      connection-string: ${AZURE_SERVICEBUS_CONNECTION_STRING}
      pricing-tier: ${PRICING_TIER}

Заметка

Microsoft рекомендует использовать самый безопасный поток проверки подлинности. Поток проверки подлинности, описанный в этой процедуре, например для баз данных, кэшей, сообщений или служб ИИ, требует очень высокой степени доверия к приложению и несет риски, не присутствующих в других потоках. Используйте этот способ только в тех случаях, когда более безопасные варианты, такие как управляемые удостоверения для подключений без пароля или ключей, неприемлемы. Для операций на локальном компьютере отдавайте предпочтение идентификаторам пользователей для беспарольных или бесключевых подключений.

Подключения

Spring Cloud Azure предоставляет следующие три варианта фабрики подключений для подключения к Служебная шина Azure JMS:

  • JmsPoolConnectionFactory: эта фабрика поддерживает пул подключений с настраиваемыми параметрами, такими как spring.jms.servicebus.pool.max-connections. Дополнительные параметры конфигурации пула с префиксом spring.jms.servicebus.pool. подробно описаны в разделе Конфигурация. Эта настройка повышает производительность с помощью возможности балансировки нагрузки Служебная шина Azure, распределяя трафик между несколькими конечными точками.

  • CachingConnectionFactory: эта фабрика повторно использует одно подключение для всех вызовов JmsTemplate, уменьшая затраты на создание подключения, что идеально подходит для сценариев с низким трафиком. Однако этот режим не использует возможности балансировки нагрузки Служебная шина Azure.

  • ServiceBusJmsConnectionFactory: в этом режиме каждый вызов JmsTemplate создает новое подключение, которое может быть ресурсоемким и менее эффективным.

Если в classpath присутствуют все три класса, какой из них используется? В следующей таблице описывается использование на основе свойств конфигурации (начиная с Spring Cloud Azure 7.1.0 и 6.2.0):

spring.jms.servicebus.pool.enabled spring.jms.cache.enabled Отправитель ConnectionFactory Контейнер прослушивателя ConnectionFactory
не задано не задано CachingConnectionFactory ServiceBusJmsConnectionFactory
не задано true CachingConnectionFactory CachingConnectionFactory
не задано false ServiceBusJmsConnectionFactory ServiceBusJmsConnectionFactory
true не задано JmsPoolConnectionFactory JmsPoolConnectionFactory
true true CachingConnectionFactory CachingConnectionFactory
true false JmsPoolConnectionFactory JmsPoolConnectionFactory
false не задано CachingConnectionFactory ServiceBusJmsConnectionFactory
false true CachingConnectionFactory CachingConnectionFactory
false false ServiceBusJmsConnectionFactory ServiceBusJmsConnectionFactory

Заметка

В следующей таблице показано значение по умолчанию ConnectionFactory, если spring.jms.servicebus.pool.enabled и spring.jms.cache.enabled не заданы для разных версий Azure Spring Cloud:

Версия Spring Cloud Azure Отправитель ConnectionFactory Контейнер прослушивателя ConnectionFactory
>= 6.2.0 или >= 7.1.0 CachingConnectionFactory ServiceBusJmsConnectionFactory
6.1.0 и 7.0.0 ServiceBusJmsConnectionFactory ServiceBusJmsConnectionFactory
<= 6.1.0 JmsPoolConnectionFactory JmsPoolConnectionFactory

Образцы

Дополнительные сведения см. в репозитории azure-spring-boot-samples на GitHub.