이 문서에서는 Azure Event Grid 사용하여 토픽에 이벤트를 보내고 Service Bus Queue를 Event Handler 사용하여 Spring Boot 애플리케이션에서 수신하는 방법을 보여줍니다.
Azure Event Grid 서비스는 MQTT 및 HTTP 프로토콜을 사용하여 유연한 메시지 사용 패턴을 제공하는 확장성이 뛰어난 완전 관리형 Pub Sub 메시지 배포 서비스입니다.
필수 구성 요소
Azure 구독 - 무료로 하나 만들기.
Java JDK(개발 키트) 버전 8 이상.
Apache Maven, 버전 3.0 이상.
Event Grid 토픽 인스턴스입니다. 없는 경우
Azure Event Grid 참조하세요. 해당 서비스 버스 대기열 인스턴스입니다. 없는 경우 Azure 포털에서 큐 만들기 참조하세요.
Spring Boot 애플리케이션입니다. 하나 없다면 Spring Initializr을 사용하여 Maven 프로젝트를 만드십시오. Maven Project를 선택하고 Java 버전 8 이상을 선택하세요.
사용자 지정 항목 구독
다음 단계를 사용하여 이벤트 구독을 만들어 event Grid에 Service Bus 큐로 이벤트를 보내도록 지시합니다.
- Azure 포털에서 Event Grid 토픽 인스턴스로 이동합니다.
- 도구 모음에서 이벤트 구독을 선택합니다.
- 이벤트 구독의 이름 값을 이벤트 구독 만들기 페이지에 입력합니다.
- 엔드포인트 유형에서 Service Bus 큐를 선택합니다.
- 엔드포인트 선택 선택한 다음, 이전에 만든 Service Bus 큐 인스턴스를 선택합니다.
Azure Event Grid를 통해 이벤트를 보내고 Azure Service Bus 큐로 수신합니다.
Azure Event Grid 리소스를 사용하면 Spring Cloud Azure Event Grid 사용하여 이벤트를 보낼 수 있습니다. Azure Service Bus Queue 리소스를 이벤트 처리기로 사용하면 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 Bill of Materials (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.1.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>메모
Spring Boot 4.0.x를 사용 중이라면,
spring-cloud-azure-dependencies버전을7.1.0로 설정해야 합니다.Spring Boot 3.5.x를 사용하는 경우,
spring-cloud-azure-dependencies버전을6.1.0로 설정해야 합니다.Spring Boot 3.1.x-3.5.x를 사용하는 경우,
spring-cloud-azure-dependencies버전을5.25.0로 설정해야 합니다.Spring Boot 2.x를 사용하는 경우
spring-cloud-azure-dependencies버전을4.20.0로 설정해야 합니다.이 BOM(자재 명세서)을
<dependencyManagement>섹션의 pom.xml 파일에서 구성해야 합니다. 이렇게 하면 모든 Spring Cloud Azure 종속성이 동일한 버전을 사용하게 됩니다.이 BOM에 사용되는 버전에 대한 자세한 내용은 스프링 클라우드 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 큐를 사용하여 수신하도록 애플리케이션을 구성합니다.
다음 예제와 같이 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메모
사용 가능한 가장 안전한 인증 흐름을 사용하는 것이 권장됩니다. 데이터베이스, 캐시, 메시징 또는 AI 서비스와 같이 이 절차에서 설명하는 인증 흐름은 애플리케이션에 대한 신뢰 수준이 매우 높고 다른 흐름에 존재하지 않는 위험을 수반합니다. 암호 없는 연결 또는 키 없는 연결에 대한 관리 ID와 같은 더 안전한 옵션이 실행 가능하지 않은 경우에만 이 흐름을 사용합니다. 로컬 컴퓨터 작업의 경우 암호 없는 연결이나 키 없는 연결에 사용자 ID를 사용하는 것이 좋습니다.
시작 클래스 파일을 편집하여 다음 콘텐츠를 표시합니다. 이 코드는 완료를 생성합니다.
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()); } }애플리케이션을 시작합니다. 시작 후 애플리케이션은 다음 예제와 유사한 로그를 생성합니다.
New event published: '"FirstName: John, LastName: James"' ... New event received: '"FirstName: John, LastName: James"'
Azure Spring Apps 배포
이제 Spring Boot 애플리케이션을 로컬로 실행했으므로 이제 프로덕션으로 이동해야 합니다. Azure Spring Apps 사용하면 코드를 변경하지 않고도 Azure Spring Boot 애플리케이션을 쉽게 배포할 수 있습니다. 이 서비스는 개발자가 코드에 집중할 수 있도록 Spring 애플리케이션의 인프라를 관리합니다. Azure Spring Apps 포괄적인 모니터링 및 진단, 구성 관리, 서비스 검색, CI/CD 통합, 청록색 배포 등을 사용하여 수명 주기 관리를 제공합니다. Azure Spring Apps 애플리케이션을 배포하려면 Azure Spring Apps 첫 번째 애플리케이션 배포를 참조하세요.
다음 단계
Spring 및 Azure 대한 자세한 내용은 spring on Azure 설명서 센터로 계속 진행하세요.
Spring 개발자용 AzureSpring Cloud Azure Event Grid 샘플