JMS에서 Azure Service Bus 사용
이 문서는✅ 버전 4.19.0 ✅ 버전 5.19.0에 적용됩니다.
이 문서에서는 Spring JMS 프레임워크에 통합된 JMS API와 함께 Azure Service Bus를 사용하는 방법을 설명합니다.
핵심 기능
암호 없는 연결
암호 없는 연결은 애플리케이션, 해당 구성 파일 또는 환경 변수에 자격 증명을 저장하지 않고 Azure 서비스에 연결하는 데 Microsoft Entra 인증을 사용합니다. Microsoft Entra 인증은 Microsoft Entra ID에 정의된 ID를 사용하여 Azure Service Bus에 연결하는 메커니즘입니다. Microsoft Entra 인증을 사용하면 중앙 위치에서 Service Bus 및 기타 Microsoft 서비스를 관리할 수 있으므로 권한 관리가 간소화됩니다.
작동 방식
Spring Cloud Azure는 먼저 애플리케이션 인증 구성에 따라 다음 유형의 자격 증명 중 하나를 빌드합니다.
ClientSecretCredential
ClientCertificateCredential
UsernamePasswordCredential
ManagedIdentityCredential
이러한 유형의 자격 증명을 찾을 수 없는 경우 DefaultTokenCredential
통해 자격 증명 체인을 사용하여 애플리케이션 속성, 환경 변수, 관리 ID 또는 IDE에서 자격 증명을 가져옵니다. 자세한 내용은 Spring Cloud Azure 인증참조하세요.
종속성 설정
Azure Service Bus를 사용하도록 Spring JMS 애플리케이션을 마이그레이션하려는 경우 다음 종속성을 추가합니다.
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-servicebus-jms</artifactId>
</dependency>
구성
다음 표에서는 Spring JMS 지원을 사용할 때 구성 가능한 속성에 대해 설명합니다.
재산 | 묘사 |
---|---|
spring.jms.servicebus.connection-string을 |
연결 문자열을 직접 제공하려는 경우의 Azure Service Bus 연결 문자열입니다. |
spring.jms.servicebus.topic-client-id를 |
JMS 클라이언트 ID입니다.
topicJmsListenerContainerFactory 콩에 대해서만 작동합니다. |
spring.jms.servicebus.enabled를 |
Service Bus JMS 자동 구성을 사용하도록 설정할지 여부를 나타내는 값입니다. 기본값은 true . |
spring.jms.servicebus.idle-timeout을 |
메시지가 배달되지 않을 때 클라이언트에서 Service Bus가 연결을 활성 상태로 유지할 것으로 예상하는 시간을 나타내는 연결 유휴 시간 제한 시간입니다. 기본값은 2m . |
.passwordless 사용spring.jms.servicebus |
Azure Service Bus JMS에 암호 없이 사용하도록 설정할지 여부입니다. 기본값은 false . |
spring.jms.servicebus.pricing-tier를 |
Azure Service Bus 가격 계층입니다. 지원되는 값은 프리미엄 및 |
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 콩에 대해서만 작동합니다. |
.pool.block-if-full을spring.jms.servicebus |
연결이 요청되고 풀이 가득 찼을 때 차단할지 여부를 나타내는 값입니다. 대신 JMSException throw하려면 false로 설정합니다. |
spring.jms.servicebus.pool.block-if-full-timeout을 |
풀이 여전히 가득 찬 경우 예외를 throw하기 전의 차단 기간입니다. |
spring.jms.servicebus.pool.enabled를 |
일반 JmsPoolConnectionFactory 대신 ConnectionFactory 만들어야 하는지 여부를 나타내는 값입니다. |
spring.jms.servicebus.pool.idle-timeout을 |
연결 풀 유휴 시간 제한입니다. |
spring.jms.servicebus.pool.max 연결 |
풀된 연결의 최대 수입니다. |
spring.jms.servicebus.pool.max-sessions-per-connections | 풀의 연결당 최대 풀된 세션 수입니다. |
spring.jms.servicebus.pool.time-between-expiration-check |
유휴 연결 제거 스레드의 실행 간에 절전 모드로 전환할 시간입니다. 음수이면 유휴 연결 제거 스레드가 실행되지 않습니다. |
.pool.use-anonymous-producers를spring.jms.servicebus |
익명 MessageProducer 인스턴스 하나만 사용할지 여부를 나타내는 값입니다.
false 설정하여 필요할 때마다 하나의 MessageProducer 만듭니다. |
spring.jms.servicebus.prefetch-policy.all을 |
이 Service Bus 네임스페이스의 프리페치 옵션에 대한 대체 값입니다. 기본값은 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 문서
기본 사용량
암호 없이 Azure Service Bus JMS에 연결
application.yml 파일에서 다음 속성을 구성합니다.
spring:
jms:
servicebus:
namespace: ${AZURE_SERVICEBUS_NAMESPACE}
pricing-tier: ${PRICING_TIER}
passwordless-enabled: true
중요하다
Azure Service Bus JMS는 Microsoft Entra ID를 사용하여 Service Bus 리소스에 대한 요청을 승인하도록 지원합니다. Microsoft Entra ID를 사용하여 현재 사용 중인 Microsoft Entra 계정에 Azure Service Bus 데이터 소유자 역할을 할당했는지 확인합니다. 자세한 내용은 Azure Portal사용하여 Azure 역할 할당
관리 ID를 사용하여 JMS를 사용하여 Azure Service Bus에 연결
관리 ID를 사용하려면 서비스에 대한 관리 ID를 사용하도록 설정하고
Azure Service Bus Data Owner
역할을 할당합니다. 자세한 내용은 Microsoft Entra ID를 사용하여 관리 ID 인증을 참조하여Azure Service Bus 리소스에 액세스합니다.application.yml 파일에서 다음 속성을 구성합니다.
spring: cloud: azure: credential: managed-identity-enabled: true jms: servicebus: namespace: ${AZURE_SERVICEBUS_NAMESPACE} pricing-tier: ${PRICING_TIER} passwordless-enabled: true
중요하다
사용자 할당 관리 ID를 사용하는 경우 사용자 할당 관리 ID 클라이언트 ID를 사용하여 속성
spring.cloud.azure.credential.client-id
추가해야 합니다.
연결 문자열을 사용하여 Azure Service Bus JMS에 연결
다음 속성을 추가하면 좋습니다.
spring:
jms:
servicebus:
connection-string: ${AZURE_SERVICEBUS_CONNECTION_STRING}
pricing-tier: ${PRICING_TIER}
연결
Spring Cloud Azure는 Azure Service Bus JMS에 연결하기 위한 다음 세 가지 연결 팩터리 옵션을 제공합니다.
JmsPoolConnectionFactory
: 기본값을 사용하도록spring.jms.servicebus.pool.enabled=true
설정하거나 풀 및 캐시 설정을 모두 설정하지 않은 상태로 둡니다. 이 팩터리는spring.jms.servicebus.pool.max-connections
같은 사용자 지정 가능한 옵션을 사용하여 연결 풀을 유지 관리합니다.spring.jms.servicebus.pool.
접두사인 추가 풀 구성 설정은 구성 섹션에 자세히 설명되어 있습니다. 이 설정은 Azure Service Bus의 부하 분산 기능을 활용하여 여러 엔드포인트에 트래픽을 분산하여 성능을 향상시킵니다.CachingConnectionFactory
:spring.jms.cache.enabled=true
설정하고spring.jms.servicebus.pool.enabled
설정하지 않은 상태로 둡니다. 이 팩터리는JmsTemplate
대한 모든 호출에 단일 연결을 다시 사용하므로 트래픽이 적은 시나리오에 적합한 연결 생성 오버헤드가 줄어듭니다. 그러나 이 모드는 Azure Service Bus의 부하 분산 기능을 활용하지 않습니다.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부터 Service Bus 서버 부하 분산을 더 잘 사용하도록 기본 ConnectionFactory
JmsPoolConnectionFactory
업데이트되었습니다.
CachingConnectionFactory
및 Session
모두 캐싱하는 데 MessageProducer
계속 사용하려면 spring.jms.cache.enabled
true
설정합니다.
샘플
자세한 내용은 GitHub의 azure-spring-boot-samples 리포지토리를 참조하세요.