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


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

Эта статья относится к:✅ версии 4.19.0 ✅ версии 5.19.0

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

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

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

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

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

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

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential

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

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

Добавьте следующие зависимости, если вы хотите перенести приложение 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без пароля Следует ли включить JMS служебной шины Azure без пароля. Значение по умолчанию — false.
spring.jms.servicebusценовой категории Ценовая категория служебной шины 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-session-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.

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

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

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

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

Важный

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

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

  1. Чтобы использовать управляемое удостоверение, включите управляемое удостоверение для службы и назначьте роль Azure Service Bus Data Owner. Дополнительные сведения см. в статье Аутентификация управляемого удостоверения с помощью идентификатора Microsoft Entra для доступа к ресурсам служебной шины 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 с идентификатором клиента управляемого удостоверения, назначаемого пользователем.

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

Добавьте следующие свойства, и вы можете пойти.

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

Блат

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

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

  • CachingConnectionFactory: установите spring.jms.cache.enabled=true и оставьте spring.jms.servicebus.pool.enabled не настроено. Эта фабрика повторно использует одно подключение для всех вызовов JmsTemplate, что снижает затраты на создание подключения, что идеально подходит для сценариев с низким трафиком. Однако этот режим не использует возможности балансировки нагрузки служебной шины Azure.

  • ServiceBusJmsConnectionFactory. Задайте spring.jms.servicebus.pool.enabled=false и spring.jms.cache.enabled=false использовать ServiceBusJmsConnectionFactory напрямую без кэширования или пула. В этом режиме каждый вызов JmsTemplate создает новое подключение, которое может быть ресурсоемким и менее эффективным.

Для оптимальной производительности и распределения нагрузки рекомендуется использовать JmsPoolConnectionFactory, задав spring.jms.servicebus.pool.enabled=true. Избегайте упаковки JmsPoolConnectionFactory с помощью CachingConnectionFactory или ServiceBusJmsConnectionFactory, так как это может не использовать преимущества пула и может привести к неактивным подключениям после того, как они вытеснили из пула.

Заметка

Начиная с Spring Cloud Azure 5.19.0, ConnectionFactory по умолчанию обновлены до JmsPoolConnectionFactory, чтобы лучше использовать балансировку нагрузки сервера служебной шины. Если вы предпочитаете продолжать использовать CachingConnectionFactory для кэширования Session и MessageProducer, задайте для spring.jms.cache.enabled значение true.

Образцы

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