✔ 깃허브 소스코드
✔ Udemy 강의
Spring Cloud Bus란?
- Spring Cloud Bus 는 분산 시스템에 존재하는 노드들을 경량 메시지 브로커(RabbitMQ, Kafka etc)와 연결하는 역할을 합니다.
- 구성 변경과 같은 상태변경, 기타관리 등을 브로드캐스트하는데 사용이 가능합니다.
- Private Git Repository에서의 변경 사항들을 마이크로 서비스들이 실행중이면서도 업데이트를 적용시켜 줍니다.
사용하는 이유
- 사용하지 않을 때의 문제점
- 서비스가 첫 실행 할때에만 프로퍼티들을 가져옵니다.
- 그래서 각 마이크로 서비스들이 실행 중일 때 Git Repository의 내용을 변경할 경우,
- 마이크로 서비스들을 재실행 하지 않는 이상 업데이트된 프로퍼티를 가져올 수 없습니다.
Solution
- Spring Cloud Bus를 사용해서 마이크로 서비스들이 실행 중일 때에도 변경 사항들을 push 할 수 있도록 해줍니다.
- 각 서비스에 Spring Cloud Bus와 Spring Boot Actuator dependency들을 추가해줘서 listener(subscriber)로 등록을 해줘서 Config Server로부터 업데이트를 전달받을 수 있도록 해줍니다.
- Messaging 기술로 인해서 업데이트를 listener들한테 브로드캐스팅해줍니다.
- 이때 사용하는 프로토콜이 AMQP(Advanced Message Queuing Protocol) 입니다.
RabbitMQ
- 이때 사용할 메시지 브로커는 RabbitMQ입니다.
- Messaging 과정에서 중재자 역할을 합니다.
- 애플리케이션에게 메시지를 전송하고 얻을 수 있는 플랫폼을 제공해줍니다.
Spring Boot Actuator
/bus-refresh
엔드포인트를 활성화하기 위해 사용해줍니다.
전반적인 메시징 과정
- 원격 저장소의 프로퍼티들을 업데이트한 후에, Spring Cloud Bus한테 subscribe된 마이크로 서비스들에게 업데이트를 브로드캐스트 해줘야 한다고 알려줘야 합니다.
- 이때 HTTP POST 방식으로
/bus-refresh
로 요청을 보내주면 브로드캐스팅을 해주게 됩니다.
Config Server 환경 구축
의존성 설정
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
/bus-refresh
엔드포인트 활성화(application.yml)
management:
endpoints:
web:
exposure:
include: bus-refresh
RabbitMQ 프로퍼티 설정(application.yml)
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
Config Client 환경 구축
의존성 설정
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
RabbitMQ 프로퍼티 설정(원격 저장소 내의 application.yml)
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest