Spring Cloud Bus

이원석·2023년 11월 8일

SpringCloud

목록 보기
4/5
post-thumbnail
본 내용은 인프런의 이도원님의 SpringCloud 강의를 참고하여 작성되었습니다.



0. 시작하며

이전 포스팅에서 Spring Cloud Config를 사용하는 Config Server를 통해 설정정보 파일들을 중앙 저장소에서 관리할 수 있는 방법에 대해 알아보았다.

하지만,마이크로 서비스의 수가 많아진다면? 모든 변경 사항에 대한 수동 작업 또한 많아진다. (일일히 서버마다 refresh 과정이 필요)

이러한 문제를 Spring Cloud Bus를 통해 해결할 수 있다!



1. Spring Cloud Bus란?

1-1. Spring Boot Actuator refresh

Actuator 모듈은 마이크로 서비스들의 상태나 변경사항을 모니터링할 수 있는 엔드포인트를 제공시켜주는 서비스이다. 이를 통해 각각의 어플리케이션, 마이크로 서비스가 변경된 Configuration 정보를 가져갈 수 있도록 한다. 하지만, 마이크로 서비스의 수가 많아진다면 수동 작업이 늘어난다.

1-2. Spring Cloud Bus

이러한 문제를 해결하기 위한 Spring Cloud Bus. Configuration의 변경 사항을 연결된 노드들에게 전달한다. (BroadCast)

SpringCloud Config가 마이크로 서비스 각각의 설정 정보를 관리하는 중개자 서비스이며, 변경된 사항들을 각각의 서비스에 전달하는 역활을 SpringCloud Bus가 한다고 생각하면 된다.

각 노드에 변경 사항들을 비동기적으로 전달(BroadCast)하기 위해서는 미들웨어인 메시지 브로커(메시징 큐잉 시스템)가 필요하다.

AMQP 프로토콜을 기반으로 동작하는 RabbitMQ를 사용해보자.



1-3 . RabbitMQ

AMQP (Advanced Message Queuing Protocol)

AMQP는 메시지 지향 미들웨어를 위한 개방형 표준 응용 계층 프로토콜로, Publisher - SubScriber 간의 데이터를 주고받기 위해 사용되는 프로토콜이다. RabbitMQ 에서 사용한다.



2. 작동방식

기존에는 변경사항을 런타임시에 적용시키기 위해 Actuator의 refresh 엔드포인트를 통해 각각의 서비스들을 업데이트 시켜줘야 했다.


http://ipAddress:port/actuator/busrefresh

어떤 서버에서든 상관없이 Actuator의 busrefresh 엔드포인트를 호출하면 Spring Cloud Bus에 연결된 모든 노드(서비스)에 busrefresh를 전달한다.

따라서, UserService, ApiGatewayService, OrderService 어디에서 호출하던 상관없이 연결된 모든 서버에 메시지가 전달된다.



3. 구현

3-1. 의존성 추가

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

Spring Cloud Bus로 연결하고자 하는 모든 서비스에 Actuator, AMQP for Clous Bus 의존성을 추가해주자.


3-2. application.yml

spring:
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest
    
management:
  endpoints:
    web:
      exposure:
        include: ... , busrefresh

rabbitmq의 노드로서 등록하기 위한 정보와 Actuator 모듈의 busrefresh 엔드포인트를 호출하기 위해 등록해주자.



3-3. RabbitMQ 작동

/usr/local/bin 디렉토리로 이동하여 rabbitmq server를 실행시켜주자. rabbitmq-server 가 안되면 ./rabbitmq-server





참고문헌
Inflearn: Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) 강의자료

0개의 댓글