이번 챕터에서는 Spring Cloud Bus를 사용하여 마이크로서비스의 설정을 자동으로 동기화하고 새로고침하는 방법을 배워보겠습니다.
이 방법을 사용하면 모든 마이크로서비스 인스턴스에 대해 refresh API를 수동으로 호출할 필요 없이, 한 번의 호출로 모든 인스턴스에 변경 사항이 전파됩니다.
Spring Cloud Bus는 경량 메시지 브로커(예: RabbitMQ)를 사용하여 마이크로서비스 인스턴스 간에 상태 변경(예: 구성 변경)을 전파하는 데 사용됩니다.
이 설정을 통해 하나의 마이크로서비스 인스턴스에서 bus refresh API를 호출하면, RabbitMQ가 모든 다른 인스턴스에 변경 사항을 전파합니다.
RabbitMQ를 로컬 시스템에서 실행하려면, 다음 단계를 따릅니다.
Docker가 설치되어 있다면, RabbitMQ를 Docker 컨테이너로 쉽게 실행할 수 있습니다. 다음 명령을 터미널에서 실행하여 RabbitMQ를 시작합니다.
docker run -d --hostname my-rabbit --name some-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:3-management
이 명령은 RabbitMQ와 관리 UI를 Docker 컨테이너로 실행합니다.
모든 마이크로서비스와 Config 서버에 Spring Cloud Bus와 RabbitMQ를 설정하려면, 다음 단계를 따릅니다.
각 마이크로서비스(accounts, cards, loans, config-server)의 pom.xml 파일에 다음 의존성을 추가합니다.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
각 마이크로서비스의 application.yml 파일에 RabbitMQ 연결 정보를 추가합니다.
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
이미 모든 마이크로서비스에서 관리 엔드포인트를 활성화했습니다. 추가적인 설정 없이 bus refresh API가 자동으로 활성화됩니다.
Config 서버와 모든 마이크로서비스(accounts, cards, loans)를 다시 시작합니다.
GitHub 리포지토리의 prod 프로파일 파일(accounts-prod.yml, cards-prod.yml, loans-prod.yml)에서 production을 prod로 변경합니다.
Postman에서 bus refresh API를 호출하여 모든 마이크로서비스에 구성 변경 사항을 전파합니다.
이 호출은 accounts 마이크로서비스 인스턴스에 대해 수행됩니다.
각 마이크로서비스(accounts, cards, loans)의 contact-info API를 호출하여 변경된 구성이 반영되었는지 확인합니다. 모든 마이크로서비스 인스턴스는 prod로 변경된 구성을 반영해야 합니다.
Spring Cloud Bus와 RabbitMQ를 사용하여 마이크로서비스의 구성 변경 사항을 자동으로 동기화 해봤습니다.
bus refresh API는 한 번의 호출로 모든 마이크로서비스 인스턴스에 변경 사항을 전파합니다.
RabbitMQ와의 통합으로 모든 인스턴스가 자동으로 변경된 구성을 반영할 수 있습니다.
Spring Cloud Bus와 RabbitMQ를 사용하여 마이크로서비스 네트워크에서 더 강력한 구성을 관리하는 방법을 배웠습니다. 다음 챕터에서는 더욱 자동화된 접근 방식을 탐구하여 수동 개입 없이도 구성 변경을 적용하는 방법을 살펴보겠습니다.