Spring에서 Azure Event Grid 사용

이 문서에서는 Azure Event Grid를 사용하여 토픽에 이벤트를 보내고 Service Bus 큐를 이벤트 처리기로 사용하여 Spring Boot 애플리케이션에서 수신하는 방법을 보여줍니다.

Azure Event Grid 서비스는 MQTT 및 HTTP 프로토콜을 사용하여 유연한 메시지 사용 패턴을 제공하는 확장성이 뛰어난 완전 관리형 Pub Sub 메시지 배포 서비스입니다.

필수 조건

사용자 지정 항목 구독

다음 단계를 사용하여 Event Grid에 Service Bus 큐로 이벤트를 보내도록 이벤트 구독을 만듭니다.

  1. Azure Portal에서 Event Grid 토픽 인스턴스로 이동합니다.
  2. 도구 모음에서 이벤트 구독을 선택합니다.
  3. 이벤트 구독 만들기 페이지에서 이벤트 구독의 이름 값을 입력합니다.
  4. 엔드포인트 유형에 대해 Service Bus 큐를 선택합니다.
  5. 엔드포인트 선택을 선택한 다음, 이전에 만든 Service Bus 큐 인스턴스를 선택합니다.

Azure Event Grid로 이벤트 보내기 및 Azure Service Bus 큐 수신

Azure Event Grid 리소스를 사용하면 Spring Cloud Azure Event Grid를 사용하여 이벤트를 보낼 수 있습니다. Azure Service Bus 큐 리소스를 이벤트 처리기로 사용하면 Service Bus용 Spring Cloud Azure Stream Binder를 사용하여 이벤트를 수신할 수 있습니다.

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

  • Spring Cloud AZURE BOM(청구서)

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

    참고 항목

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

  • Spring Cloud Azure Event Grid Starter 아티팩트:

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter-eventgrid</artifactId>
    </dependency>
    
  • Spring Cloud Azure Stream Binder Service Bus 아티팩트:

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-stream-binder-servicebus</artifactId>
    </dependency>
    

애플리케이션 코딩

다음 단계를 사용하여 Event Grid를 사용하여 이벤트를 보내고 Service Bus 큐를 사용하여 수신하도록 애플리케이션을 구성합니다.

  1. 다음 예제와 같이 application.yaml 구성 파일에서 Azure Event Grid 및 Service Bus 자격 증명을 구성합니다.

    spring:
      cloud:
        azure:
          eventgrid:
            endpoint: ${AZURE_EVENTGRID_ENDPOINT}
            key: ${AZURE_EVENTGRID_KEY}
          servicebus:
            connection-string: ${AZURE_SERVICEBUS_CONNECTION_STRING}
        function:
          definition: consume
        stream:
          bindings:
            consume-in-0:
              destination: ${AZURE_SERVICEBUS_QUEUE_NAME}
          servicebus:
            bindings:
              consume-in-0:
                consumer:
                  auto-complete: false
    
  2. 시작 클래스 파일을 편집하여 다음 콘텐츠를 표시합니다. 이 코드는 완료를 생성합니다.

    import com.azure.core.util.BinaryData;
    import com.azure.messaging.eventgrid.EventGridEvent;
    import com.azure.messaging.eventgrid.EventGridPublisherClient;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.annotation.Bean;
    import org.springframework.messaging.Message;
    
    import java.util.List;
    import java.util.function.Consumer;
    
    @SpringBootApplication
    public class EventGridSampleApplication implements CommandLineRunner {
    
        private static final Logger LOGGER = LoggerFactory.getLogger(EventGridSampleApplication.class);
    
        @Autowired
        EventGridPublisherClient<EventGridEvent> client;
    
        public static void main(String[] args) {
            SpringApplication.run(EventGridSampleApplication.class, args);
        }
    
        @Bean
        public Consumer<Message<String>> consume() {
            return message -> {
                List<EventGridEvent> eventData = EventGridEvent.fromString(message.getPayload());
                eventData.forEach(event -> {
                    LOGGER.info("New event received: '{}'", event.getData());
                });
            };
        }
    
        @Override
        public void run(String... args) throws Exception {
            String str = "FirstName: John, LastName: James";
            EventGridEvent event = new EventGridEvent("A user is created", "User.Created.Text", BinaryData.fromObject(str), "0.1");
    
            client.sendEvent(event);
            LOGGER.info("New event published: '{}'", event.getData());
        }
    }
    
    
  3. 애플리케이션을 시작합니다. 시작 후 애플리케이션은 다음 예제와 유사한 로그를 생성합니다.

    New event published: '"FirstName: John, LastName: James"'
    ...
    New event received: '"FirstName: John, LastName: James"'
    

Azure Spring Apps에 배포

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

다음 단계

Spring과 Azure에 대한 자세한 사항은 Azure의 Spring 설명서 센터를 참조합니다.