이번 강의에서는 Spring Cloud Stream을 활용하여 마이크로서비스 간의 비동기 통신을 구현하는 방법을 다룹니다. 이 과정을 통해 메시지 마이크로서비스와 RabbitMQ를 연동하여 이벤트 기반 통신을 설정할 것입니다.
먼저, 메시지 마이크로서비스에 Spring Cloud Stream과 RabbitMQ를 통합하기 위해 몇 가지 변경 작업을 진행합니다.
pom.xml
파일에서 이전에 사용했던 의존성을 모두 제거하고, spring-cloud-stream
및 spring-cloud-stream-binder-rabbit
의존성을 추가합니다. 이 의존성들은 Spring Cloud Stream을 활성화하고 RabbitMQ와의 통합을 가능하게 합니다.<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
<!-- 테스트용 의존성들 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-test-binder</artifactId>
</dependency>
</dependencies>
application.yml
파일에서 RabbitMQ와의 연결을 설정합니다. 이를 통해 메시지 마이크로서비스가 RabbitMQ의 큐와 바인딩될 수 있도록 합니다.spring:
cloud:
stream:
bindings:
emailsms-in-0:
destination: send-communication
group: ${spring.application.name}
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
MessageFunctions
클래스에서 정의한 함수들은 Spring Cloud Stream에 의해 자동으로 큐에서 메시지를 수신하게 됩니다.Accounts 마이크로서비스가 메시지를 생성하고 RabbitMQ로 전송할 수 있도록 다음과 같이 설정합니다.
spring-cloud-stream
및 spring-cloud-stream-binder-rabbit
의존성을 추가합니다.<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
</dependencies>
application.yml
파일에 Spring Cloud Stream과 RabbitMQ 설정을 추가합니다.spring:
cloud:
stream:
bindings:
sendCommunication-out-0:
destination: send-communication
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
AccountServiceImpl
클래스에서 StreamBridge
를 사용하여 계좌 생성 후 RabbitMQ로 메시지를 전송하는 로직을 추가합니다.@Autowired
private final StreamBridge streamBridge;
private void sendCommunication(Account savedAccount, Customer savedCustomer) {
AccountsMessageDto message = new AccountsMessageDto(
savedAccount.getAccountNumber(),
savedCustomer.getName(),
savedCustomer.getEmail(),
savedCustomer.getMobileNumber()
);
boolean result = streamBridge.send("sendCommunication-out-0", message);
log.info("Is communication request successfully processed? " + result);
}
이제 모든 설정이 완료되었으므로, 마이크로서비스와 RabbitMQ를 실행하여 동작을 확인할 수 있습니다.
이 강의에서는 Spring Cloud Stream을 사용하여 RabbitMQ와의 통합을 통해 비동기 마이크로서비스 통신을 구현하는 방법을 배웠습니다. Spring Cloud Stream은 마이크로서비스 간의 통신을 단순화하고, 메시지 브로커와의 연동을 손쉽게 설정할 수 있도록 도와줍니다. 이번 과정을 통해 Spring Cloud Stream의 강력한 기능과 활용 방법을 이해하고, 실제로 적용해보는 경험을 했습니다.
다음 강의에서는 이러한 설정을 기반으로 실제 동작을 테스트하고, 각 마이크로서비스가 RabbitMQ를 통해 어떻게 상호작용하는지 확인해 보겠습니다.