MSA

RabbitMQ

혀눅짱 2023. 9. 4. 11:30

기존에 구현한 config-service의 설정 값이 변경된다면 이와 연동된 프로젝트를 재기동해야하는 번거로움이 있었다.

이를 위해 spring cloud bus를 이용해 변경된 값을 적용해본다.

Spring cloud bus는 동적으로 config 변경을 적용하기 위한 MQ(Message Queue) Handler
이번 글에는 rabbitMQ를 통해 설정값을 반영하도록 한다.

 

 

Spring cloud bus는 상태 및 구성에 대한 변경사항을 연결된 노드들(마이크로 서비스)에게 전달하는 역할
그리고 각각의 노드(마이크로서비스)들은 경량 메시지 브로커와 연결되어 있는 상태

 

POST 방식으로 /busrefresh 를 호출
- 근데 어디에 호출해야할까?
어떤 서비스든 상관없다. Spring Cloud Bus에 연결된 누구에게라도 호출을 하게되면 다른 서비스에게 까지 전달이 된다.
USER SERVICE에 /busrefresh를 호출하게 되면 ORDER SERVICE, CATALOG 서비스에도 반영이 된다.

 

먼저 rabbitmq를 설치한다.

$ brew update
$ brew install rabbitmq
$ rabbitmq-server

설치후 http://127.0.0.1:15672(rabbitmq default port)로 접속후 

기본 계정인 guest/guest로 접속한다.

 

그 후 rabbitmq와 연동될 마이크 서비스에 디펜던시를 각각 추가한다.

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

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

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
spring:
  application:
    name: config-server
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest
management:
  endpoints:
    web:
      exposure:
        include: health, busrefresh

 

각각의 마이크로서비스에 세팅이 완료된 후 테스트해본다.

 

먼저 설정파일의 token.secret파일의 값을 test를 붙여서 변경한후 

 

http://localhost:8000/user-service/actuator/busrefresh 

user-service에서 해당 변경을 적용한 후 로직을 호출하면

 

변경된 설정값인 token secret이 출력된다