이 문서에서는 Spring Cloud Azure 및 Spring Messaging Azure Storage 큐를 사용하는 방법을 설명합니다. Spring Framework는 메시징 시스템과 통합하기 위한 광범위한 지원을 제공합니다.
스프링 메시징 애저 스토리지 큐
주요 개념
Azure Queue Storage는 많은 수의 메시지를 저장하기 위한 서비스입니다. HTTP 또는 HTTPS를 사용하여 인증된 호출을 통해 전 세계 어디에서나 메시지에 액세스합니다. 큐 메시지의 크기는 최대 64KB입니다. 큐에는 스토리지 계정의 총 용량 제한까지 수백만 개의 메시지가 포함될 수 있습니다. 큐는 일반적으로 비동기적으로 처리할 작업의 백로그를 만드는 데 사용됩니다. Azure Queue Storage용 Spring Messaging 프로젝트는 서비스 버스 기반 메시징 솔루션 개발에 핵심 Spring 개념을 적용합니다. 메시지를 보내고 받기 위한 개략적인 추상화로
종속성 설정
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter</artifactId>
</dependency>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-messaging-azure-storage-queue</artifactId>
</dependency>
구성 / 설정
라이브러리는 StorageQueueTemplate다음과 같은 구성 옵션을 제공합니다.
| 재산 | 유형 | 설명 |
|---|---|---|
spring.cloud.azure.message-converter.isolated-object-mapper |
불리언 | 격리된 ObjectMapper 빈이 스토리지 큐 메시지 변환기에서 사용되는지 여부입니다. 기본적으로 사용하도록 설정됩니다. |
spring.cloud.azure.storage.queue.enabled |
불리언 | Azure Storage 큐를 사용할 수 있는지 여부입니다. |
spring.cloud.azure.storage.queue.connection-string |
문자열 | 스토리지 큐 네임스페이스 연결 문자열 값입니다. |
spring.cloud.azure.storage.queue.accountName |
문자열 | 스토리지 큐 계정 이름입니다. |
spring.cloud.azure.storage.queue.accountKey |
문자열 | 스토리지 큐 계정 키입니다. |
기본 사용법
사용자 지정 스토리지 큐 메시지 변환기
스토리지 큐 메시지 변환기를 구성하는 방법에는 두 가지가 있습니다.
기본 Storage 큐 메시지 변환기에서 사용자 지정
ObjectMapper빈 또는 Spring Boot에서 관리하는 빈을 사용하도록ObjectMapper다음 속성을 구성합니다.spring: cloud: azure: message-converter: isolated-object-mapper: false스토리지 큐 메시지 변환기 빈을 직접 정의합니다.
@Bean AzureMessageConverter<QueueMessageItem, QueueMessageItem> storageQueueMessageConverter() { JsonMapper jsonMapper = JsonMapper.builder().addModule(new JavaTimeModule()).build(); return new ServiceBusMessageConverter(jsonMapper); }
Azure Storage 큐에 메시지 보내기 및 받기
다음 단계를 사용하여 메시지를 보내고 받습니다.
다음 방법 중 하나를 사용하여 자격 증명 구성 옵션을 채웁니다.
DefaultAzureCredential자격 증명의 경우 application.yml 파일에서 다음 속성을 구성합니다.spring: cloud: azure: storage: queue: account-name: ${AZURE_STORAGE_QUEUE_ACCOUNT_NAME}연결 문자열로 자격 증명의 경우 application.yml 파일에서 다음 속성을 구성합니다.
spring: cloud: azure: storage: queue: connection-string: ${AZURE_STORAGE_QUEUE_CONNECTION_STRING}자격 증명을 관리 ID로 사용하려면 application.yml 파일에서 다음 속성을 구성합니다.
spring: cloud: azure: credential: managed-identity-enabled: true client-id: ${AZURE_CLIENT_ID} profile: tenant-id: <tenant> storage: queue: account-name: ${AZURE_STORAGE_QUEUE_ACCOUNT_NAME}
비고
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> storage: queue: account-name: ${AZURE_STORAGE_QUEUE_ACCOUNT_NAME}
비고
tenant-id, common, organizations또는 테넌트 ID와 같은 consumers사용할 수 있습니다. 이러한 값에 대한 자세한 내용은 잘못된 엔드포인트(개인 및 조직 계정) 섹션의 오류 AADSTS50020 - ID 공급자의 사용자 계정이 테넌트에 존재하지 않습니다를 참조하세요. 단일 테넌트 앱을 다중 테넌트로 변환하는 방법에 대한 정보는 Microsoft Entra ID에서 단일 테넌트 앱을 다중 테넌트로 변환을 참조하세요.
StorageQueueTemplate자동으로 구성됩니다. 다음 예제와 같이 메시지를 보내거나 받기 위해 자체 빈에 직접 자동으로 연결할 수 있습니다.@Component public class MyBean { private final StorageQueueTemplate storageQueueTemplate; public MyBean(StorageQueueTemplate storageQueueTemplate) { this.storageQueueTemplate = storageQueueTemplate; } public void someMethod() { this.serviceBusTemplate.sendAsync('STORAGE_QUEUE_NAME', MessageBuilder.withPayload("Hello world").build()).subscribe(); } public void processMessage() { Message<?> message = storageQueueTemplate.receiveAsync('STORAGE_QUEUE_NAME', Duration.ofSeconds(30)).block(); // ... } }
샘플
자세한 내용은 GitHub의 azure-spring-boot-samples 리포지토리를 참조하세요.