
해당 포스팅은 인프런에 "Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)" 강의를 기반으로 작성됐습니다.
포스팅의 모든 사진 자료는 해당 강의 출처임을 밝힙니다.
이전에 Config Service에 대해서 학습하면서 설정 정보를 외부에 저장하고 각 서버에서 필요한 설정 정보를 사용할 수 있게 됐습니다.
만약, 설정 정보를 수정하게 될 경우, 각 서비스마다 설정 정보를 갱신해주기 위해서는 서버 재기동 또는 Actuator를 사용하여 refresh 해주는 방식으로 갱신해줘야 했습니다.
하짐만, 이러한 방식은 마이크로 서비스의 갯수가 커짐에 따라 수동으로 refresh해주기 번거로워 집니다.
따라서 이러한 불편함을 해결하기 위해 설정 정보를 갱신하는 마지막 방식인
에 대해서 학습하겠습니다.
Spring Cloud Bus의 역할은 다음과 같습니다.
쉽게 말해서, 설정 정보 변경사항(publisher)을 메시지 형태로 메시지 브로커(midleware)에게 전달하면, 해당 요청을 받으려고 미리 구독해놓은 구독자(subscriber)들에게 메시지를 전달해준다는 원리입니다.
Spring Cloud Config Server에서 설정 변경 사항을 Spring Cloud Bus를 통해 각 MS에 전파하는 방식입니다.

조금 더 자세하게 설명하면 아래와 같습니다.

외부 클라이언트가 POST 방식의 busrefresh Spring Cloud Bus에 연결된 어떠한 MS(API Gateway 또는 Spring Cloud Config Server도 포함)에든지 요청을 하게되면, Spring Cloud Bus에 연결된 모든 MS에 변경사항이 반영되도록 broadcasting 해줍니다.
메시지 지향 미들웨어를 위한 개방형 표준 응용 계층 프로토콜을 말합니다.
메시지 지향, 큐잉, 라우팅(P2P, Pub-Sub), 신뢰성, 보안
Erlang, RabbitMQ에서 사용 - Window 기준
💡 P2P 방식이란?
중앙 서버를 거치지 않고 클라이언트 컴퓨터끼리 직접 통신하는 방식을 말합니다.
Apache SoftWare Foundation이 Scalar 언어로 개발한 오픈 소스 메시지 브로커 프로젝트.
분산형 스트림밍 플랫폼
대용량 데이터를 처리 가능한 메시징 시스템

결론적으로, 레빗엠큐는 적은 데이터량을 안전하게 전달하는 것을 보장하는 경우에 사용하고, 카프카는 대용량 데이터를 처리해야 하는 경우에 사용하게 됩니다.

actuator
spring-cloud-starter-bus-amqp
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
...
management:
endpoints:
web:
exposure:
include: health, ..., *busrefresh
RabbitMQ 관련 설정을 추가해줍니다.
Actuator에 busrefresh 엔드포인트 추가해줍니다.
JWT TOKEN 구현 후 테스트 예정.