Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается, как можно использовать Spring Cloud Azure и Spring Messaging Служебная шина Azure. Spring Framework обеспечивает обширную поддержку интеграции с системами обмена сообщениями.
Сервисная шина Azure Spring Messaging
Основные понятия
Служебная шина Azure — это полностью управляемый корпоративный брокер сообщений с очередями сообщений и разделами публикации и подписки. Проект Spring Messaging для служебной шины Azure применяет основные понятия Spring к разработке решений обмена сообщениями на основе служебной шины. Он предоставляет шаблон как высокоуровневую абстракцию для отправки сообщений. Она также обеспечивает поддержку POJO, управляемых сообщениями, с аннотациями @ServiceBusListener и контейнером слушателя. Эти библиотеки способствуют использованию внедрения зависимостей и декларативной конфигурации. Во всех этих случаях можно заметить сходство с поддержкой JMS в Spring Framework и поддержкой RabbitMQ в Spring AMQP.
Настройка зависимостей
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter</artifactId>
</dependency>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-messaging-azure-servicebus</artifactId>
</dependency>
Конфигурация
Библиотека предоставляет следующие параметры конфигурации для ServiceBusTemplate и @ServiceBusListener:
| Недвижимость | Тип | Описание |
|---|---|---|
spring.cloud.azure.message-converter.isolated-object-mapper |
булевый | Используется ли изолированный объект ObjectMapper для преобразователя сообщений служебной шины. Включен по умолчанию. |
spring.cloud.azure.servicebus.enabled |
булевый | Включена ли служебная шина Azure. |
spring.cloud.azure.servicebus.connection-string |
Струна | Значение строки подключения пространства имен служебная шина. |
spring.cloud.azure.servicebus.custom-endpoint-address |
Струна | Адрес настраиваемой конечной точки, используемый при подключении к служебная шина. |
spring.cloud.azure.servicebus.namespace |
Струна | Значение пространства имен служебная шина, которое является префиксом полного доменного имени. Полное доменное имя должно состоять из NamespaceName.DomainName |
spring.cloud.azure.servicebus.entity-type |
Струна | Тип сущности служебной шины Azure. |
Базовое использование
Преобразователь сообщений пользовательской служебной шины
Существует два способа настройки преобразователя сообщений служебной шины:
Настройте следующее свойство, чтобы преобразователь сообщений служебная шина по умолчанию использовал компонент
ObjectMapper, который может быть вашим пользовательским компонентомObjectMapperили компонентом, управляемым Spring Boot:spring: cloud: azure: message-converter: isolated-object-mapper: falseОпределите бин преобразователя сообщений служебная шина непосредственно:
@Bean AzureMessageConverter<ServiceBusReceivedMessage, ServiceBusMessage> serviceBusMessageConverter() { JsonMapper jsonMapper = JsonMapper.builder().addModule(new JavaTimeModule()).build(); return new ServiceBusMessageConverter(jsonMapper); }
Отправка сообщений в служебную шину Azure
Чтобы отправить сообщения, выполните следующие действия.
Заполните параметры конфигурации учетных данных с помощью одного из следующих подходов:
Для учетных данных в качестве
DefaultAzureCredentialнастройте следующие свойства в файле application.yml:spring: cloud: azure: servicebus: namespace: ${AZURE_SERVICE_BUS_NAMESPACE} entity-type: ${AZURE_SERVICE_BUS_ENTITY_TYPE}Для учетных данных в качестве строки подключения настройте следующие свойства в файле application.yml:
spring: cloud: azure: servicebus: connection-string: ${AZURE_SERVICE_BUS_CONNECTION_STRING} entity-type: ${AZURE_SERVICE_BUS_ENTITY_TYPE}Для учетных данных в качестве управляемых удостоверений настройте следующие свойства в файле application.yml:
spring: cloud: azure: credential: managed-identity-enabled: true client-id: ${AZURE_CLIENT_ID} profile: tenant-id: <tenant> servicebus: namespace: ${AZURE_SERVICE_BUS_NAMESPACE} entity-type: ${AZURE_SERVICE_BUS_ENTITY_TYPE}
Примечание.
Для tenant-idразрешены следующие значения: common, organizations, consumersили идентификатор клиента. Дополнительные сведения об этих значениях см. в разделе Используется неправильная конечная точка (личные учетные записи и учетные записи организации) раздела Ошибка AADSTS50020 - Учетная запись пользователя от поставщика удостоверений не существует в арендаторе. Сведения о преобразовании вашего однопользовательского приложения см. в разделе Преобразование однопользовательского приложения в многопользовательское в Microsoft Entra ID.
Для учетных данных в качестве субъекта-службы настройте следующие свойства в файле application.yml:
spring: cloud: azure: credential: client-id: ${AZURE_CLIENT_ID} client-secret: ${AZURE_CLIENT_SECRET} profile: tenant-id: <tenant> servicebus: namespace: ${AZURE_SERVICE_BUS_NAMESPACE} entity-type: ${AZURE_SERVICE_BUS_ENTITY_TYPE}
Примечание.
Для tenant-idразрешены следующие значения: common, organizations, consumersили идентификатор клиента. Дополнительные сведения об этих значениях см. в разделе Используется неправильная конечная точка (личные учетные записи и учетные записи организации) раздела Ошибка AADSTS50020 - Учетная запись пользователя от поставщика удостоверений не существует в арендаторе. Сведения о преобразовании вашего однопользовательского приложения см. в разделе Преобразование однопользовательского приложения в многопользовательское в Microsoft Entra ID.
ServiceBusTemplateавтоматически конфигурируется, и вы можете напрямую автоматически внедрить его в свои бины, как показано в следующем примере:@Component public class MyBean { private final ServiceBusTemplate serviceBusTemplate; public MyBean(ServiceBusTemplate serviceBusTemplate) { this.serviceBusTemplate = serviceBusTemplate; } public void someMethod() { this.serviceBusTemplate.sendAsync('QUEUE_NAME', MessageBuilder.withPayload("Hello world").build()).subscribe(); } }
Получение сообщений из служебной шины Azure
Чтобы получать сообщения, выполните следующие действия.
Заполните параметры конфигурации учетных данных.
Добавьте аннотацию
@EnableAzureMessaging, которая запускает обнаружение методов, аннотированных с помощью@ServiceBusListener, и в фоновом режиме создает контейнер слушателя сообщений.@SpringBootApplication @EnableAzureMessaging public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }Примечание.
Чтобы избежать повторения, начиная с версии
5.21.0, аннотация@EnableAzureMessagingавтоматически включается в Spring Cloud Azure Auto-configure.При наличии инфраструктуры ServiceBus вы можете аннотировать любой компонент с помощью
@ServiceBusListener, чтобы создать конечную точку слушателя. Следующий компонент создает конечную точку прослушивателя в очередиQUEUE_NAME:@Component public class MyBean { @ServiceBusListener(destination = "QUEUE_NAME") public void processMessage(String content) { // ... } }
Настройка свойств клиента служебная шина
Разработчики могут использовать AzureServiceClientBuilderCustomizer для настройки свойств клиента служебной шины. Следующий пример настраивает свойство sessionIdleTimeout в ServiceBusClientBuilder:
@Bean
public AzureServiceClientBuilderCustomizer<ServiceBusClientBuilder.ServiceBusSessionProcessorClientBuilder> customizeBuilder() {
return builder -> builder.sessionIdleTimeout(Duration.ofSeconds(10));
}
Образцы
Дополнительные сведения см. в репозитории azure-spring-boot-samples на сайте GitHub.