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

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

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

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

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

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

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

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential

Если ни один из этих типов учетных данных не найден, цепочка учетных данных через 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 убедитесь, что вы назначили роль Служебная шина Azure владельца данных учетной записи Microsoft Entra, которую вы используете. Дополнительные сведения см. в разделе Assign Azure роли с помощью портала Azure.

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

  1. Чтобы использовать управляемое удостоверение, включите управляемое удостоверение для службы и назначьте роль Служебная шина Azure Data Owner. Дополнительные сведения см. в разделе Authenticate управляемое удостоверение с 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}

Заметка

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

Блат

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

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

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

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

Когда все три класса существуют в пути к классам, какой из них используется? В следующей таблице описано, что используется на основе свойств конфигурации (начиная с Spring Cloud Azure 7.2.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.2.0 CachingConnectionFactory ServiceBusJmsConnectionFactory
6.1.0 и 7.0.0 ServiceBusJmsConnectionFactory ServiceBusJmsConnectionFactory
<= 6.1.0 JmsPoolConnectionFactory JmsPoolConnectionFactory

Образцы

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