개요
RabbitMQ와 Spring Boot를 연결해 보겠습니다.
RabbitMQ를 Spring Cloud Bus로 활용하여 Spring Cloud Config가 관리하는 설정 파일이 변경되면 해당 파일을 사용하는 서버들을 모두 업데이트 해보려 합니다.
Spring Cloud Bus란 Spring Cloud 환경에서 마이크로 서비스 간 메세지 전달을 지원하는 프레임워크 입니다. 주로 서비스 간의 설정 변경, 애플리케이션 이벤트 전파, 다른 서비스로 신호 전송 등에 사용됩니다.
구현
RabbitMQ를 Spring Boot에 사용하기 위해 코드를 추가하겠습니다.
의존성 추가
Spring Cloud Config 서버 의존성 추가
// actuator
implementation 'org.springframework.boot:spring-boot-starter-actuator'
// bootstrap
implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap'
// amqp
implementation 'org.springframework.cloud:spring-cloud-starter-bus-amqp'
product 서버 의존성 추가
// amqp
implementation 'org.springframework.cloud:spring-cloud-starter-bus-amqp'
설정 파일 추가
Spring Cloud Config 서버 yml 파일
spring:
rabbitmq:
host: 127.0.0.1
port: 5672
username: guest
password: guest
management:
endpoints:
web:
exposure:
include: health, busrefresh
health, busrefresh 엔드포인트를 추가합니다.
busrefresh 명령어를 통해 변경된 설정 파일을 사용하는 모든 서버들을 업데이트 할 것 입니다.
전체 상태
server:
port: 8888
spring:
rabbitmq:
host: 127.0.0.1
port: 5672
username: guest
password: guest
application:
name: config-service
cloud:
config:
server:
git:
uri: https://github.com/cladren123/dotd_config
management:
endpoints:
web:
exposure:
include: health, busrefresh
product의 yml 파일
spring:
rabbitmq:
host: 127.0.0.1
port: 5672
username: guest
password: guest
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/dotd?serverTimezone=UTC&useUniCode=yes&characterEncoding=UTF-8
username: root
password: 비밀번호
jpa:
hibernate:
ddl-auto: create
cache:
type: redis
redis:
host: localhost
port: 6379
password: 비밀번호
management:
endpoints:
web:
exposure:
include: refresh, health, beans, busrefresh
RabbitMQ의 설정 정보와 actuator의 management의 busrefresh를 추가합니다.
연결 테스트
RabbitMQ 연결과 busrefresh 엔드포인트를 추가했으면 잘 작동하는지 확인해 보겠습니다.
연결 테스트를 위해 Spring Cloud Config 서버와 테스트 할 서버(필자의 경우 product 서버)를 가동해야 합니다.
설정 정보 원본
변경 전 상태는 dev 입니다.
설정 정보 변경
Git Repository의 설정 정보를 dev change로 변경했습니다.
Config Server에서 변경 내용 확인
127.0.0.1:8888/product/dev
변경 사항 업데이트
busrefresh를 사용하여 설정 파일의 변경 사항을 해당 설정 파일을 사용하는 서버에 업데이트 하겠습니다.
다음 형식으로 Rest API 요청을 보냅니다. (8080은 product 서버의 포트번호 입니다.)
Post 방식
127.0.0.1:8080/actuator/busrefresh
저는 PostMan을 사용했습니다.
product 서버의 해당 요청을 보내면 연결된 RabbitMQ를 통해 다른 서버들도 업데이트 메세지가 전달되어 업데이트가 진행됩니다.
busrefresh 이후 상태가 dev change로 변경된 것이 반영된 것을 확인할 수 있었습니다.
마무리
이번에는 RabbitMQ를 Spring Cloud Bus로 활용하여 Spring Cloud Config 에서 관리하는 설정 정보가 변경되었을 때 일괄 업데이트하도록 구현했습니다.
감사합니다.