다음을 통해 공유


Spring에서 Azure Event Grid 사용

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

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

필수 구성 요소

  • Azure 구독 - 무료로 하나 만들.

  • JDK(Java Development Kit) 버전 8 이상

  • Apache Maven버전 3.0 이상.

  • Event Grid 토픽 인스턴스입니다. 항목이 없는 경우 Azure Event Grid사용자 지정 토픽 또는 도메인 만들기를 참조하세요.

  • Service Bus 큐 인스턴스입니다. 없는 경우, Azure 포털에서 큐 만들기를 참조하세요.

  • Spring Boot 애플리케이션입니다. 하나 없다면 Spring Initializr을 사용하여 Maven 프로젝트를 만드십시오. Maven 프로젝트 선택하고 Java 버전 8 이상을 선택해야 합니다.

사용자 지정 항목 구독

다음 단계에 따라 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.19.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    메모

    Spring Boot 2.x를 사용하는 경우 spring-cloud-azure-dependencies 버전을 4.19.0설정해야 합니다. 이 BOM(Bill of Material)은 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에 대해 자세히 알아보려면 Spring on Azure 설명서 센터를 계속 진행하세요.

Spring 개발자를 위한 Azure Spring Cloud Azure Event Grid 샘플