이 문서에서는 Spring Cloud Azure 및 Spring Messaging Azure Service Bus를 사용하는 방법을 설명합니다. Spring Framework는 메시징 시스템과 통합하기 위한 광범위한 지원을 제공합니다.
Spring 메시징 Azure 서비스 버스
주요 개념
Azure Service Bus는 메시지 큐와 게시-구독 토픽이 있는 완전 관리형 엔터프라이즈 메시지 브로커입니다. Azure Service Bus용 Spring Messaging 프로젝트는 핵심 Spring 개념을 서비스 버스 기반 메시징 솔루션 개발에 적용합니다. 메시지를 보내기 위한 고수준 추상화로 템플릿을 제공합니다. 또한 @ServiceBusListener 애너테이션과 리스너 컨테이너를 사용하는 메시지 기반 POJO도 지원합니다. 이러한 라이브러리는 종속성 주입 및 선언적 구성의 사용을 촉진합니다. 이러한 모든 경우에서 Spring AMQP의 Spring Framework 및 RabbitMQ 지원에서 JMS 지원과 유사점을 확인할 수 있습니다.
종속성 설정
<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 빈이 Service Bus 메시지 변환기에서 사용되는지 여부입니다. 기본적으로 사용하도록 설정됩니다. |
spring.cloud.azure.servicebus.enabled |
불리언 | Azure Service Bus를 사용할 수 있는지 여부입니다. |
spring.cloud.azure.servicebus.connection-string |
문자열 | Service Bus 네임스페이스 연결 문자열 값입니다. |
spring.cloud.azure.servicebus.custom-endpoint-address |
문자열 | Service Bus에 연결할 때 사용할 사용자 지정 엔드포인트 주소입니다. |
spring.cloud.azure.servicebus.namespace |
문자열 | FQDN의 접두사인 Service Bus 네임스페이스 값입니다. FQDN은 NamespaceName.DomainName으로 구성되어야 합니다. |
spring.cloud.azure.servicebus.entity-type |
문자열 | Azure Service Bus의 엔터티 형식입니다. |
기본 사용법
사용자 지정 Service Bus 메시지 변환기
Service Bus 메시지 변환기를 구성하는 방법에는 두 가지가 있습니다.
기본 Service Bus 메시지 변환기가
ObjectMapper빈을 사용하도록 다음 속성을 구성하세요. 이 빈은 사용자 지정ObjectMapper빈이거나 Spring Boot에서 관리하는 빈일 수 있습니다.spring: cloud: azure: message-converter: isolated-object-mapper: falseService Bus 메시지 변환기 빈을 직접 정의합니다.
@Bean AzureMessageConverter<ServiceBusReceivedMessage, ServiceBusMessage> serviceBusMessageConverter() { JsonMapper jsonMapper = JsonMapper.builder().addModule(new JavaTimeModule()).build(); return new ServiceBusMessageConverter(jsonMapper); }
Azure Service Bus로 메시지 보내기
다음 단계를 사용하여 메시지를 보냅니다.
다음 방법 중 하나를 사용하여 자격 증명 구성 옵션을 채웁니다.
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}자격 증명을 관리 ID로 사용하려면 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또는 테넌트 ID와 같은 consumers사용할 수 있습니다. 이러한 값에 대한 자세한 내용은 잘못된 엔드포인트(개인 및 조직 계정) 섹션의 오류 AADSTS50020 - ID 공급자의 사용자 계정이 테넌트에 존재하지 않습니다를 참조하세요. 단일 테넌트 앱을 다중 테넌트로 변환하는 방법에 대한 정보는 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또는 테넌트 ID와 같은 consumers사용할 수 있습니다. 이러한 값에 대한 자세한 내용은 잘못된 엔드포인트(개인 및 조직 계정) 섹션의 오류 AADSTS50020 - ID 공급자의 사용자 계정이 테넌트에 존재하지 않습니다를 참조하세요. 단일 테넌트 앱을 다중 테넌트로 변환하는 방법에 대한 정보는 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 Service Bus에서 메시지 받기
다음 단계를 사용하여 메시지를 받습니다.
자격 증명 구성 옵션을 입력합니다.
@EnableAzureMessaging애너테이션을 추가하면@ServiceBusListener로 애너테이션이 지정된 메서드를 검색하게 되며, 내부적으로 메시지 리스너 컨테이너가 생성됩니다.@SpringBootApplication @EnableAzureMessaging public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }비고
반복을 피하기 위해 버전
5.21.0부터 Spring Cloud Azure 자동 구성 활성화 어노테이션@EnableAzureMessaging이 자동으로 활성화됩니다.ServiceBus 인프라가 있는 경우, 모든 빈에
@ServiceBusListener애너테이션을 지정하여 리스너 엔드포인트를 만들 수 있습니다. 다음 구성 요소는QUEUE_NAME큐에 수신기 엔드포인트를 만듭니다.@Component public class MyBean { @ServiceBusListener(destination = "QUEUE_NAME") public void processMessage(String content) { // ... } }
Service Bus 클라이언트 속성 사용자 지정
개발자는 AzureServiceClientBuilderCustomizer 사용하여 Service Bus 클라이언트 속성을 사용자 지정할 수 있습니다. 다음 예제에서는 sessionIdleTimeoutServiceBusClientBuilder 속성을 사용자 지정합니다.
@Bean
public AzureServiceClientBuilderCustomizer<ServiceBusClientBuilder.ServiceBusSessionProcessorClientBuilder> customizeBuilder() {
return builder -> builder.sessionIdleTimeout(Duration.ofSeconds(10));
}
샘플
자세한 내용은 GitHub의 azure-spring-boot-samples 리포지토리를 참조하세요.