Spring에서 JMS를 사용하여 Azure Service Bus에 액세스

이 자습서에서는 Azure Service Bus JMS용 Spring Boot Starter를 사용하여 Service Bus 및 Service Bus queuestopics에서 메시지를 보내고 받는 방법을 보여 줍니다.

Azure는 AMQP 1.0("고급 메시지 큐 프로토콜 1.0") 표준을 기반으로 하는 Service Bus("Azure Service Bus")라는 비동기 메시징 플랫폼을 제공합니다. 지원되는 Azure 플랫폼 범위에서 Service Bus를 사용할 수 있습니다.

Azure Service Bus JMS용 Spring Boot Starter는 Service Bus와 Spring JMS 통합을 제공합니다.

다음 비디오에서는 JMS 2.0을 사용하여 Spring JMS 애플리케이션을 Azure Service Bus와 통합하는 방법을 설명합니다.


이 자습서에는 Microsoft Entra 인증 및 SAS(공유 액세스 서명) 인증이라는 두 가지 인증 방법이 포함되어 있습니다. 암호 없는 탭에는 Microsoft Entra 인증이 표시되고 커넥트ion 문자열 탭에 SAS 인증이 표시됩니다.

Microsoft Entra 인증은 Microsoft Entra ID에 정의된 ID를 사용하여 Azure Service Bus JMS에 연결하는 메커니즘입니다. Microsoft Entra 인증을 사용하면 중앙 위치에서 데이터베이스 사용자 ID 및 기타 Microsoft 서비스를 관리할 수 있으므로 권한 관리가 간소화됩니다.

SAS 인증은 Service Bus JMS에 대한 위임된 액세스에 Azure Service Bus 네임스페이스의 연결 문자열 사용합니다. 공유 액세스 서명을 자격 증명으로 사용하도록 선택하는 경우 연결 문자열 직접 관리해야 합니다.

필수 조건

Important

이 자습서의 단계를 완료하려면 Spring Boot 버전 2.5 이상이 필요합니다.

Azure Service Bus에서 메시지 보내기 및 받기

Azure Service Bus에 대한 큐 또는 토픽을 사용하면 Spring Cloud Azure Service Bus JMS를 사용하여 메시지를 보내고 받을 수 있습니다.

Spring Cloud Azure Service Bus JMS Starter 모듈을 설치하려면 pom.xml 파일에 다음 종속성을 추가합니다.

  • Spring Cloud AZURE BOM(청구서)

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>5.11.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    참고 항목

    Spring Boot 2.x를 사용하는 경우 버전을 .로 설정 spring-cloud-azure-dependencies 해야 합니다 4.17.0. 이 BOM(청구서)은 pom.xml 파일의 섹션에서 구성 <dependencyManagement> 해야 합니다. 이렇게 하면 모든 Spring Cloud Azure 종속성이 동일한 버전을 사용합니다. 이 BOM에 사용되는 버전에 대한 자세한 내용은 어떤 버전의 Spring Cloud Azure를 사용해야 하는지를 참조하세요.

  • Spring Cloud Azure Service Bus JMS Starter 아티팩트:

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter-servicebus-jms</artifactId>
    </dependency>
    

애플리케이션 코딩

다음 단계를 사용하여 Service Bus 큐 또는 토픽을 사용하여 메시지를 보내고 받도록 애플리케이션을 구성합니다.

  1. application.properties 파일에 다음 속성을 추가하여 Service Bus 자격 증명을 구성합니다.

    참고 항목

    Azure Service Bus JMS는 Microsoft Entra ID를 사용하여 Service Bus 리소스에 대한 요청을 승인하도록 지원합니다. Microsoft Entra ID를 사용하면 Azure RBAC(Azure 역할 기반 액세스 제어)를 사용하여 사용자 또는 애플리케이션 서비스 주체일 수 있는 보안 주체권한을 부여할 수 있습니다.

    Important

    시작하기 전에 현재 사용 중인 Microsoft Entra 계정에 Azure Service Bus 데이터 소유자 역할을 할당했는지 확인합니다. 자세한 내용은 Azure Portal을 사용하여 Azure 역할 할당을 참조하십시오.

    spring.jms.servicebus.namespace=<ServiceBusNamespace>
    spring.jms.servicebus.pricing-tier=<ServiceBusPricingTier>
    spring.jms.servicebus.passwordless-enabled=true
    spring.jms.listener.receive-timeout=60000
    

    다음 표에서는 구성의 필드에 대해 설명합니다.

    필드 설명
    spring.jms.servicebus.namespace Azure Portal에서 Service Bus 서비스 인스턴스에서 가져온 네임스페이스를 지정합니다.
    spring.jms.servicebus.pricing-tier Service Bus의 가격 책정 계층을 지정합니다. 지원되는 값은 프리미엄표준입니다. 프리미엄 계층은 JMS(Java Message Service) 2.0을 사용하고 표준 계층은 JMS 1.1을 사용하여 Azure Service Bus와 상호 작용합니다.
    spring.jms.servicebus.passwordless-enabled 암호 없는 암호를 사용할지 여부를 지정합니다.
    spring.jms.listener.receive-timeout 기본적으로 수신 시간 제한 값은 1000입니다. 60000으로 설정하는 것이 좋습니다.
  2. JMS 수신기 주석이 추가된 엔드포인트에 대한 지원을 사용하도록 설정하려면 추가 @EnableJms 합니다. 다음 예제와 @JmsListener 같이 메시지를 보내고 메시지를 받는 데 사용합니다JmsTemplate.

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.jms.annotation.EnableJms;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.jms.annotation.JmsListener;
    import org.springframework.jms.core.JmsTemplate;
    
    @SpringBootApplication
    @EnableJms
    public class ServiceBusJMSQueueApplication implements CommandLineRunner {
    
        private static final Logger LOGGER = LoggerFactory.getLogger(ServiceBusJMSQueueApplication.class);
        private static final String QUEUE_NAME = "<QueueName>";
    
        @Autowired
        private JmsTemplate jmsTemplate;
    
        public static void main(String[] args) {
            SpringApplication.run(ServiceBusJMSQueueApplication.class, args);
        }
    
        @Override
        public void run(String... args) {
            LOGGER.info("Sending message");
            jmsTemplate.convertAndSend(QUEUE_NAME, "Hello World");
        }
    
        @JmsListener(destination = QUEUE_NAME, containerFactory = "jmsListenerContainerFactory")
        public void receiveMessage(String message) {
            LOGGER.info("Message received: {}", message);
        }
    
    }
    

    <QueueName> Service Bus 네임스페이스에 구성된 고유한 큐 이름으로 대체합니다.

    이 자습서에서는 구성 또는 코드에 인증 작업이 없습니다. 그러나 Azure 서비스에 연결하려면 인증이 필요합니다. 인증을 완료하려면 Azure ID를 사용해야 합니다. Spring Cloud Azure는 코드 변경 없이 자격 증명을 가져오는 데 도움이 되는 Azure ID 라이브러리를 사용합니다 DefaultAzureCredential.

    DefaultAzureCredential은 여러 인증 방법을 지원하고 런타임에 사용할 방법을 결정합니다. 이 방법을 사용하면 앱이 환경별 코드를 구현하지 않고도 다양한 환경(예: 로컬 및 프로덕션 환경)에서 다양한 인증 방법을 사용할 수 있습니다. 자세한 내용은 DefaultAzureCredential을 참조 하세요.

    로컬 개발 환경에서 인증을 완료하려면 Azure CLI, Visual Studio Code, PowerShell 또는 기타 방법을 사용할 수 있습니다. 자세한 내용은 Java 개발 환경에서 Azure 인증을 참조 하세요. Azure 호스팅 환경에서 인증을 완료하려면 사용자 할당 관리 ID를 사용하는 것이 좋습니다. 자세한 내용은 Azure 리소스에 대한 관리 ID란?을 참조하세요.

  3. 애플리케이션을 시작합니다. 다음 예제 출력과 Hello World 같이 애플리케이션 로그를 보고 Sending message 게시해야 합니다.

    Sending message
    Message received: Hello World
    

Azure Spring Apps에 배포

이제 Spring Boot 애플리케이션을 로컬로 실행했으므로 이제 프로덕션으로 이동해야 합니다. Azure Spring Apps 를 사용하면 코드를 변경하지 않고도 Spring Boot 애플리케이션을 Azure에 쉽게 배포할 수 있습니다. 이 서비스는 개발자가 코드에 집중할 수 있도록 Spring 애플리케이션의 인프라를 관리합니다. Azure Spring Apps는 포괄적인 모니터링 및 진단, 구성 관리, 서비스 검색, CI/CD 통합, 파란색-녹색 배포 등을 사용하여 수명 주기 관리를 제공합니다. Azure Spring Apps에 애플리케이션을 배포하려면 Azure Spring Apps에 첫 번째 애플리케이션 배포를 참조하세요.

다음 단계