본문 바로가기
spring cloud

Spring Cloud Bus

by 킹차니 2022. 3. 6.

이전에 spring actuator를 사용하여 config 정보를 하나의 server에 두고, 다른 micro service들이 참조하도록 하였다. 하지만 이와 같이 구현할 경우 config-server에 있는 내용이 변경될 때마다, 모든 micro service들에 대해 actuator/refresh를 해주어야 했다. 하여 이러한 문제를 해결할 수 있는 것이 Spring Cloud Bus이다.

 

Spring Cloud Bus

- 분산 시스템의 노드를 경랼 메시지 브로커(RabbitMQ)와 연결

- 상태 및 구성에 대한 변경 사항을 연결된 노드에게 전달(Broadcast)

Spring cloud bus를 사용할 경우 HTTP POST /busrefresh 로 여러 micro service 중 하나만 refresh를 해줘도 모든 micro service들이 refresh 된다. Spring Cloud Bus가 본인을 구독한 모든 서비스들에게 데이터를 주게 되는 것이다.

 

이를 위해서는 먼저 RabbitMQ를 설치한다.

 

설치했다고 가정하고

 

RabbitMQ를 사용하여 Spring Cloud Bus를 사용하기 위해서는 아래와 같은 의존성이 필요하다.

 

Gradle:

 

Maven:

 

그리고 이를 사용할 모든 프로젝트에 busrefresh 엔드포인트를 추가해줘야 한다.

만약 Config Server에서 참조하는 설정정보파일(yml)이 수정되면 busrefresh를 통해 변경된 내용을 각 micro service들에게 전달할 수 있다.

특히 이때 하나의 micro service에게만 전달해도 모든 micro service들이 변경된 사항을 받을 수 있다.

만약 user service와 apigateway service, order service가 같은 config server를 참조하고 있을때, yml 파일을 수정한 뒤, 

"user-service/actiator/busrefresh" 만을 해주면 apigateway, order service 모두 변경된 데이터를 받게 되는 것이다.

 

그리고 각 서비스들이 RabbitMQ를 사용하기 위해 아래와 같은 내용을 yml에 추가해준다.

port: 5672는 rabbitMQ의 기본 포트이고, username, password는 맨 처음에는 guest로 사용할 수 있다.

이와 같은 사항들을 수정하거나, rabbitMQ 서비스를 모니터링 하고 싶다면 

http://localhost:15672/ 를 브라우저로 접속하여 확인할 수 있다.

 

이제 원격 저장소에 저장한 yml파일을 수정한 뒤, commit, push하고, /actuator/busrefresh 로 post요청을 보내면 모든 micro service들이 수정된 내용을 참조하게 될 것이다.

 

 

 

출처 : 인프런 Lee Dowon님의 강의와 PDF 자료
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4