이번 강의에서는 이전에 구현한 비동기 이벤트 스트리밍을 확장하여 Message 마이크로서비스에서 Accounts 마이크로서비스로 이벤트를 다시 전송하는 과정을 설명합니다. 이 과정은 전체 비즈니스 흐름을 완성하기 위한 중요한 단계입니다.
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은 emailsms 함수의 반환 값(sms 함수에서 반환된 long 타입의 accountNumber)을 RabbitMQ 교환으로 자동 전송합니다. 이를 통해 Message 마이크로서비스에서 이벤트를 트리거하고, 이를 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;
communicationSwitch 컬럼을 업데이트합니다.public Boolean updateCommunicationStatus(Long accountNumber) {
// accountNumber를 사용하여 데이터베이스에서 계좌 정보를 가져와 communicationSwitch를 true로 설정하는 로직 구현
return true;
}
Accounts 마이크로서비스의 application.yml 파일에 새로운 Input Binding을 추가합니다. 이 설정은 Message 마이크로서비스에서 전송된 메시지를 수신할 수 있도록 합니다.spring:
cloud:
stream:
bindings:
updateCommunication-in-0:
destination: communication-sent
group: accounts-group
이 설정을 통해 Accounts 마이크로서비스는 communication-sent 큐를 모니터링하며, Message 마이크로서비스에서 전송된 메시지를 수신합니다.
Spring Cloud Stream의 강력함: Spring Cloud Stream을 사용하면 코드 변경 없이 다른 메시지 브로커나 시스템으로 쉽게 전환할 수 있습니다. 이는 마이크로서비스 간의 비동기 통신을 보다 쉽게 관리하고 확장할 수 있게 해줍니다.
함수 조합의 유연성: Spring Cloud Functions를 사용하면 함수들을 조합하여 복잡한 비즈니스 로직을 쉽게 구현할 수 있습니다. 이는 코드의 재사용성과 유지보수성을 높이는 데 매우 유용합니다.
이제 모든 설정이 완료되었으므로, 다음 강의에서는 이러한 변경 사항을 실제로 테스트하고, 두 마이크로서비스 간의 이벤트 스트리밍이 제대로 동작하는지 확인할 것입니다.
이번 강의에서는 Message 마이크로서비스에서 Accounts 마이크로서비스로 이벤트를 전송하기 위한 설정을 완료했습니다. 이를 통해 두 마이크로서비스 간의 양방향 비동기 통신을 구현하였으며, 이를 통해 전체 비즈니스 흐름이 완성되었습니다. 다음 강의에서는 이 설정들을 실제로 테스트하여 모든 것이 정상적으로 작동하는지 확인할 것입니다.