본문 바로가기

spring/cloud

[spring cloud]#2 spring cloud bus 를 이용하여 설정 정보 동적으로 변경하기

각 어플리케이션의 설정 정보를 외부의 서비스를 이용하여 설정하는 방법을 적용하는 configuration service 구현 방법에 이어서 동적으로 실행 중인 어플리케이션의 동작을 멈추지 않고 설정 정보를 변경하는 방법을 알아보자

 

사전 준비

1. 외부 설정 서비스

 

[spring cloud]#1 spring cloud config server에서 application 설정 정보 조회하기

spring cloud config server 이점 분산 시스템에서 서버, 클라이언트 구성에 필요한 설정 정보를 외부 시스템에서 관리하기 위해서 사용하는 기술 하나의 중앙화 된 저장소에서 구성요소 관리 가능 각

note-ydg.tistory.com

 

절차

1. 메시지 브로커 설치 (rabbitmq or kafka)

2. bus를 설치할 마이크로 서비스에 의존성 추가하기

3. application.yml 설정하기

 

1.  메시지 브로커 설치하기 및 실행

docker run --name messagebroker -p 15672:15672 -p 5672:5672 rabbitmq:3-management

도커를 이용해서 간단하게 rabbitmq 를 설치 및 실행할 수 있다. 도커가 없다면 rabbitmq 홈페이지에서 수동설치를 하거나 도커를 설치하여 실습을 진행하자.

 

rabbitmq의 초기 username과 password는 guest 이다.

 

2. 의존성 추가하기 (gradle)

implementation 'org.springframework.cloud:spring-cloud-starter-bus-amqp' // spring cloud bus
implementation 'org.springframework.boot:spring-boot-starter-actuator' // spring actuator

버스의 기능을 위해서 추가할 두 가지 라이브러리를 추가해주자.

 

3. application.yml 설정 추가

# bus configuration
spring:
  rabbitmq:
    host: {host uri}
    port: 5672
    username: {rabbitmq username}
    password: {rabbitmq password}
# actuator configuration
management:
  endpoints:
    web:
      exposure:
        include:
          - refresh # 개별 서비스 업데이트 path
          - busrefresh # 일괄 업데이트 path

rabbitmq에 접속하기 위해서 필요한 정보와 actuator 에서 업데이트를 위해서 필요한 path 정보를 설정해주자.

 

4. test

4-1 실행 중인 서비스에 refresh 요청하기 (개별 갱신)

POST http://{target service uri}/actuator/refresh 요청을 한 이후에 변경된 설정이 반영이 되었는지 확인하기

request
response

4-2 글로벌 갱신 요청하기 busrefresh

POST http://{bus refresh service}/actuator/busrefresh 요청을 한 이후에 변경된 설정이 모든 어플리케이션에 반영이 되었는지 확인하기

request
response

 

test controller code

 

application.yml

간단하게 변경된 설정 정보를 Environment 객체를 이용해서 조회하는 rest controller 를 구현해서 기능이 동작하는지 확인하는 식으로 확인을 해보았다.

 

+ 204 응답 코드가 무엇인가?

The HTTP 204 No Content success status response code indicates that a request has succeeded, but that the client doesn't need to navigate away from its current page. 

성공했는데 현재 페이지에서 이동할 필요가 없다는 것을 의미한다고 한다.

 

+ spring cloud bus 공식 문서

 

Spring Cloud Bus

The bus tries twice to eliminate processing an event — once from the original ApplicationEvent and once from the queue. To do so, it checks the sending service ID against the current service ID. If multiple instances of a service have the same ID, ev

docs.spring.io