Spring Cloud Stream을 사용한 비동기 통신 구현

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

이번 강의에서는 Spring Cloud Stream을 활용하여 마이크로서비스 간의 비동기 통신을 구현하는 방법을 다룹니다. 이 과정을 통해 메시지 마이크로서비스와 RabbitMQ를 연동하여 이벤트 기반 통신을 설정할 것입니다.

1. 메시지 마이크로서비스에 Spring Cloud Stream 통합

먼저, 메시지 마이크로서비스에 Spring Cloud Stream과 RabbitMQ를 통합하기 위해 몇 가지 변경 작업을 진행합니다.

  • 의존성 추가: pom.xml 파일에서 이전에 사용했던 의존성을 모두 제거하고, spring-cloud-streamspring-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에 의해 자동으로 큐에서 메시지를 수신하게 됩니다.

2. Accounts 마이크로서비스 업데이트

Accounts 마이크로서비스가 메시지를 생성하고 RabbitMQ로 전송할 수 있도록 다음과 같이 설정합니다.

  • 의존성 추가: spring-cloud-streamspring-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);
}

3. 마이크로서비스 및 RabbitMQ 실행

이제 모든 설정이 완료되었으므로, 마이크로서비스와 RabbitMQ를 실행하여 동작을 확인할 수 있습니다.

요약

이 강의에서는 Spring Cloud Stream을 사용하여 RabbitMQ와의 통합을 통해 비동기 마이크로서비스 통신을 구현하는 방법을 배웠습니다. Spring Cloud Stream은 마이크로서비스 간의 통신을 단순화하고, 메시지 브로커와의 연동을 손쉽게 설정할 수 있도록 도와줍니다. 이번 과정을 통해 Spring Cloud Stream의 강력한 기능과 활용 방법을 이해하고, 실제로 적용해보는 경험을 했습니다.

다음 강의에서는 이러한 설정을 기반으로 실제 동작을 테스트하고, 각 마이크로서비스가 RabbitMQ를 통해 어떻게 상호작용하는지 확인해 보겠습니다.

profile
무슨 생각하며 사니

0개의 댓글