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