Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
를 수강하면서 작성한 글입니다.
이전 글(Actuator)에서는 Config server에 어떤 값을 변경했을 때 각각의 서비스가 갱신 된 설정 정보를 가져가기 위해서 Actuator를 사용하여 변경된 정보를 반영 할 수 있도록 하였습니다. 이번 글에서는 Spring Cloud Bus를 이용하여 변경된 설정정보를 각각의 서비스들이 반영할 수 있도록 해보겠습니다.
Spring cloud bus는 동적으로 config 변경을 적용하기 위한 MQ(Message Queue) Handler 입니다.
이번 글에는 rabbitMQ를 통해 설정값을 반영하도록 하겠습니다.
Spring cloud bus는 다음과 같은 기능을 합니다.
Spring cloud bus는 상태 및 구성에 대한 변경사항을 연결된 노드들(마이크로 서비스)에게 전달하는 역할을 합니다.
그리고 각각의 노드(마이크로서비스)들은 경량 메시지 브로커와 연결되어 있는 상태여야합니다.
POST
방식으로 /busrefresh
를 호출/busrefresh
를 호출하게 되면 ORDER SERVICE, CATALOG 서비스에도 반영이 된다. mac 기준
우선 homebrew를 설치합니다. 그 후 아래 명령어를 입력해줍니다.
$ brew update
$ brew install rabbitmq
$ rabbitmq-server
rabbitMQ local에 접속합니다.
위와 같은 화면이 잘 나왔다면 정상적으로 실행 된 것 입니다.
default username, password는 둘다 guest
입니다.
Config Server, Micro service(user service, Api gateway service...) - build.gradle
의존성 추가
implementation "org.springframework.cloud:spring-cloud-starter-bootstrap"
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.cloud:spring-cloud-starter-bus-amqp'
메세지 지향 미들웨어를 위한 개방형 표준 응용 계층 프로토콜
config server, microservice - application.yml
server:
port: 8888
spring:
application:
name: config-service
rabbitmq:
host: 127.0.0.1
port: 5672
username: guest
password: guest
cloud:
config:
server:
git:
uri: file:///Users/{파일경로}
management:
endpoints:
web:
exposure:
include: health, busrefresh
user-service/health_check
호출test 방법
1. apigateway 서버에 busrefresh 호출
apigateway 서버에서 actuator/busrefresh
를 호출했지만 user-service에서도 변경된 값이 잘 적용된 것을 볼 수 있습니다.
Spring Cloud Bus를 통해 각각의 서비스를 개별적으로 호출하여 refresh시켜줘야했던 actuator의 단점을 보완하여 Message Queue를 통해 값이 변경되고 변경된 것을 하나의 서비스에만 적용해도 다른 서비스에 모두 적용된 것을 알 수 있습니다. 이렇게 Message Queue 방식을 이용해서 서비스를 구축한다면 유지보수에 큰 장점이 있을 것 같습니다.
하지만 한편으로는 너무 자동화..? 되어있어서 어떤 서비스에 반영되는지 정확히 알고싶을 때에는 문서화 혹은 모니터링 툴이 필요하다는 생각이 들었습니다.