공부/MSA

[MSA] Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) - Spring Cloud Bus(RabbitMQ)

sesam 2024. 1. 27. 01:10
728x90

configuration values 변경했을 때 방영하는 3가지 방법

이어서...

1. 서버 재가동
2. Actuator의 refresh옵션(서버 재가동 X)
    참고링크
    -  Spring Boot Actuator Dependendy추가
    -  Application 상태, 모니터링
    -  Metric 수집을 위한 Http End point 제공
3. Spring cloud bus 사용 (서버 재가동 X)

3. Spring cloud bus 사용 (서버 재가동 X)

Spring cloud bus 사용

분산 시스템의 노드(마이크로 서비스)를 경량 메시지 브로커(RabbitMQ)와 연결

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

 

 

 

 

Actuator

변경된 데이터를 갖고 왔을 때 Spring Cloud Server에서 내용을 가지고 있는다.

가지고 있다가 AMQP프로토콜에서 각각의 마이크로 서비스가(얘가 주체!) Actuator를 통해서 refresh를 POST요청으로 변경된 데이터를 가져갔다. 

 

Spring Cloud Bus

AMQP 프로토콜을 이용해서 데이터가 변경되었음을 알려준다.

Spring Cloud Bus(얘가 주체!) 마이크로 서비스한테 직접 데이터를 PUSH해주는 방식으로 변경사항을 알려준다.

마이크로 서비스들 중 하나가 변경사항을 감지하고 변경되었다는 통보해주면 나머지 마이크로 서비스가 앞에 있는 Spring Cloud Bus를 통해서 변경된 사항을 똑같이 받을 수 있다.

Actuator가 refresh를 하지 않아도 각가 변경된 사항을 가져가도록 지원해주는게 Bus

 

연결되어진 모든 노드에 대해 데이터를 전달해주는 방송 역할

분산 시스템의 노드를 경량 메시지 브로커와 연결

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

 

 

 

 

큐잉 서비스 중 하나의 솔루션

 

 

 

 

Rabbit MQ 설치

https://www.rabbitmq.com/

  • Windows

윈도우 설치 참고 링크

Erlang 설치 후

C:\Program Files\erl-23.1

 

RabbitMQ 설치 후

C:\Program Files\RabbitMQ Server\rabbitmq_server-3.12.12\sbin

 

powerShell 실행 후 Management Plugin 설치

rabbitmq-plugins enable rabbitmq_management

 

http://localhost:15672/ 접속

Username : geust

Password: geust

 

 

  • macOs

https://www.rabbitmq.com/install-homebrew.html

$ brew update

$ brew install rabbitmq

exportPATH=PATH:/usr/local/sbin

$ rabbitmq-server

설치 시 python 관련 오류(위 이미지 참조) 발생 하면, 아래 커맨드 실행

$ xcode-select --install

 

 

프로젝트 시작

config-service, user-service, apigateway-service

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

 

 

Application.yml

spring:
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest
    
management:  # 클라이언트 역할을 하겠다..
  endpoints:
    web:
      exposure:
        include: refresh, health, beans, httptrace,⭐busrefesh⭐

 

 

 

 

기동 순서

Start RabbitMQ server

Start Spring Cloud Config service

Start Eureka Discovery Service

Start Spring Cloud Gateway Service

Start Users Microservice

 

 

user-service, apigateway-service

bootstrap.yml

spring:
  cloud:
    config:
      uri: http://127.0.0.1:8888
      name: config-service 
      # 파일이름이 아니라 어플리케이션 이름을 적으면 해당 application.yml을 읽어온다.

 

회원가입 후 로그인하면 토큰이 나온다..

 

 

 

값을 변경하고 저장.

 

 

 

값 변경 후,  ~/actuator/busrefresh에  GET or POST 요청

user-services이든 apigateway-service이든 요청해도 상관없다.

값이 변경된 것을 인지하면 다른 곳에서도 값이 바뀐다.

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