두 마이크로서비스 간 이벤트 스트리밍 완료하기

날아올라돼지야·2024년 8월 31일
0

이번 강의에서는 이전에 구현한 비동기 이벤트 스트리밍을 확장하여 Message 마이크로서비스에서 Accounts 마이크로서비스로 이벤트를 다시 전송하는 과정을 설명합니다. 이 과정은 전체 비즈니스 흐름을 완성하기 위한 중요한 단계입니다.

1. 메시지 마이크로서비스에서 이벤트 전송 설정

  • Output Binding 추가: Message 마이크로서비스에서 Accounts 마이크로서비스로 이벤트를 스트리밍하기 위해 application.yml 파일에 Output Binding을 추가합니다.
spring:
  cloud:
    stream:
      bindings:
        emailsms-out-0:
          destination: communication-sent

이 설정은 emailsms 함수 조합의 결과(즉, sms 함수의 반환 값)가 communication-sent라는 이름의 RabbitMQ 교환(exchange)으로 전송되도록 합니다.

  • Spring Cloud Stream의 자동화: Spring Cloud Streamemailsms 함수의 반환 값(sms 함수에서 반환된 long 타입의 accountNumber)을 RabbitMQ 교환으로 자동 전송합니다. 이를 통해 Message 마이크로서비스에서 이벤트를 트리거하고, 이를 Accounts 마이크로서비스가 수신할 수 있게 됩니다.

2. Accounts 마이크로서비스에서 이벤트 수신 설정

  • 새로운 패키지 및 클래스 생성: Accounts 마이크로서비스에서 수신된 메시지를 처리하기 위해 새로운 패키지와 클래스를 생성합니다.
package com.eazybytes.accounts.functions;

import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.function.Consumer;

@Configuration
public class AccountsFunctions {
    
    private static final Logger log = LoggerFactory.getLogger(AccountsFunctions.class);
    
    public Consumer<Long> updateCommunication() {
        return accountNumber -> {
            log.info("Updating Communication status for account number: {}", accountNumber);
            // 여기에서 accountNumber를 사용하여 데이터베이스 업데이트 로직 구현
        };
    }
}
  • 데이터베이스 스키마 변경: schema.sql 파일에 새로운 communicationSwitch 컬럼을 추가합니다. 이 컬럼은 Boolean 타입으로, 고객에게 커뮤니케이션이 성공적으로 전송되었는지를 추적합니다.
ALTER TABLE accounts ADD communication_switch BOOLEAN;
  • Accounts 서비스 클래스 변경: 새로운 메서드를 추가하여 데이터베이스의 communicationSwitch 컬럼을 업데이트합니다.
public Boolean updateCommunicationStatus(Long accountNumber) {
    // accountNumber를 사용하여 데이터베이스에서 계좌 정보를 가져와 communicationSwitch를 true로 설정하는 로직 구현
    return true;
}

3. 계정 서비스에서 새로운 함수 바인딩 추가

  • Input Binding 설정: Accounts 마이크로서비스의 application.yml 파일에 새로운 Input Binding을 추가합니다. 이 설정은 Message 마이크로서비스에서 전송된 메시지를 수신할 수 있도록 합니다.
spring:
  cloud:
    stream:
      bindings:
        updateCommunication-in-0:
          destination: communication-sent
          group: accounts-group

이 설정을 통해 Accounts 마이크로서비스는 communication-sent 큐를 모니터링하며, Message 마이크로서비스에서 전송된 메시지를 수신합니다.

4. 코드의 주요 포인트 정리

  • Spring Cloud Stream의 강력함: Spring Cloud Stream을 사용하면 코드 변경 없이 다른 메시지 브로커나 시스템으로 쉽게 전환할 수 있습니다. 이는 마이크로서비스 간의 비동기 통신을 보다 쉽게 관리하고 확장할 수 있게 해줍니다.

  • 함수 조합의 유연성: Spring Cloud Functions를 사용하면 함수들을 조합하여 복잡한 비즈니스 로직을 쉽게 구현할 수 있습니다. 이는 코드의 재사용성과 유지보수성을 높이는 데 매우 유용합니다.

5. 다음 단계

이제 모든 설정이 완료되었으므로, 다음 강의에서는 이러한 변경 사항을 실제로 테스트하고, 두 마이크로서비스 간의 이벤트 스트리밍이 제대로 동작하는지 확인할 것입니다.

요약

이번 강의에서는 Message 마이크로서비스에서 Accounts 마이크로서비스로 이벤트를 전송하기 위한 설정을 완료했습니다. 이를 통해 두 마이크로서비스 간의 양방향 비동기 통신을 구현하였으며, 이를 통해 전체 비즈니스 흐름이 완성되었습니다. 다음 강의에서는 이 설정들을 실제로 테스트하여 모든 것이 정상적으로 작동하는지 확인할 것입니다.

profile
무슨 생각하며 사니

0개의 댓글