본문 바로가기
카테고리 없음

[Spring Cloud] 설정값 관리하기 - 2 ( With Spring Cloud Bus)

by Geunny 2022. 9. 15.
반응형

이전 글에서 Config-Server를 이용한 공통 yml 관리와 스프링 클라우드에서 제공하는 Actuator/bootstrap 기능을 알아보았다.

https://webheck.tistory.com/entry/Spring-Cloud-%EC%84%A4%EC%A0%95%EA%B0%92-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0-1

 

[Spring Cloud] 설정값 관리하기 - 1

MSA 를 구성함에 있어서 스프링 클라우드 사용시 application.yml 파일의 수정이 자주 일어나게 된다. 해당 파일은 부트로 구성된 어플리케이션이 처음 로딩될 때 서버 정보에 반영되여 만약 수정이

webheck.tistory.com

 

이전 글에서 보다시피 변경된 성정값을 반영하기 위해

각 마이크로서비스(이하MS)의 각각의 Actuator 의 refresh 기능을 사용하기엔 많은 번거로움이 있을수 있다고 말했다.

 

이러한 번거로움을 덜어주는 기능을 스프링 클라우드에서 제공해주는데 그 이름은 이글의 제목처럼 Spring Cloud Bus이다.

 

먼저 개념적으로 설명하자면 스프링 클라우드 버스는 해당 MS 들에 메시지 큐를 연결하여 Acuator의 refresh 동작을 메시지 큐에 담아서

해당 메시지 큐와 연결된 모든 MS의 Acuator refresh 를 진행시켜주는 개념이다.

 

이러한 기능은 소스의 수정없이 단순한 설정값을 추가함으로써 기능제공이 가능한 이점이 있다.

 

이번 글에서는 RabbitMQ를 이용하여 각 MS를 RabbitMQ 에 연결하여 Spring Cloud Bus를 이용한 설정값 갱신을 진행해보려 한다.

 

1. RabbitMQ 설치(Mac OS 기준)

 

 Mac OS 기준으로 RabbitMQ 는 brew 명령어를 통해 설치가 가능하다. 또한 로컬 설치뿐만 아니라 도커를 이용하여 가상 컨테이너에 설치해도 무관하다.

 

 

brew install rabbitmq

 

brew 를 통해 설치하면 해당 서비스는 /usr/local/sbin 에 설치된다. 

export path 를 설정하거나 해당 폴더로 이동하여 RabbitMQ-Server를 실행시켜 준다.

 

이제 각 서비스에 Spring Cloud Bus 의존성을 추가해 준다.

 

현재 테스트를 위해 사용되는 서비스는 Config-server, User-service, api-gateway 3개 이다.

 

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

rabbitMQ 외에도 여러 메시지 큐에대한 의존성도 존재하니 사용하는 메시지 큐에 따라 사용하면된다.

작성해야할 내용

 

1. 각 MS application.yml 에  메시지큐 서버정보 등록

 

spring:
  application:
    name: api-gateway-service 
  rabbitmq: # config-server, user-service에도 동일하게 작성해준다.
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest

 

2.  각 MS application.yml 에 Actuator 설정에 busrefresh 추가.

management:
  endpoints:
    web:
      exposure:
        include: refresh, health, beans, httptrace, busrefresh

 

작성후 config-server 에서 관리하는 yml 파일 변경을 갱신하는 방법으로는 메시지큐와 연결된 아무 서비스에서 host:port/actuator/busrefresh 를 POST 로 요청해 주면 모든 서비스가 메시지큐를 통해 갱신된 yml 을 가져오게 된다.

댓글