다음을 통해 공유


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 가격 계층입니다. 지원되는 값은 프리미엄 및 표준. 프리미엄 계층은 JMS(Java Message Service) 2.0을 사용하고 표준 계층은 JMS 1.1을 사용하여 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에 연결

  1. 관리 ID를 사용하려면 서비스에 대한 관리 ID를 사용하도록 설정하고 Azure Service Bus Data Owner 역할을 할당합니다. 자세한 내용은 Microsoft Entra ID를 사용하여 관리 ID 인증을 참조하여Azure Service Bus 리소스에 액세스합니다.

  2. 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=falseServiceBusJmsConnectionFactory 설정합니다. 이 모드에서 JmsTemplate 호출할 때마다 리소스 집약적이고 효율성이 떨어지는 새 연결이 만들어집니다.

최적의 성능 및 부하 분산을 위해 JmsPoolConnectionFactory설정하여 spring.jms.servicebus.pool.enabled=true 사용하는 것이 좋습니다. 풀링 혜택을 부정할 수 있고 풀에서 제거된 후 비활성 연결을 유지하게 될 수 있으므로 JmsPoolConnectionFactory 또는 CachingConnectionFactoryServiceBusJmsConnectionFactory 래핑하지 마세요.

메모

Spring Cloud Azure 5.19.0부터 Service Bus 서버 부하 분산을 더 잘 사용하도록 기본 ConnectionFactoryJmsPoolConnectionFactory 업데이트되었습니다. CachingConnectionFactorySession모두 캐싱하는 데 MessageProducer 계속 사용하려면 spring.jms.cache.enabledtrue설정합니다.

샘플

자세한 내용은 GitHub의 azure-spring-boot-samples 리포지토리를 참조하세요.