DevOps/RabbitMQ

RabbitMQ, Spring Cloud Bus로 사용하기

너지살 2023. 10. 27. 03:40

메세지 브로커 RabbitMQ

 

개요

RabbitMQ와 Spring Boot를 연결해 보겠습니다. 

RabbitMQ를 Spring Cloud Bus로 활용하여 Spring Cloud Config가 관리하는 설정 파일이 변경되면 해당 파일을 사용하는 서버들을 모두 업데이트 해보려 합니다. 

 

Spring Cloud Bus란 Spring Cloud 환경에서 마이크로 서비스 간 메세지 전달을 지원하는 프레임워크 입니다. 주로 서비스 간의 설정 변경, 애플리케이션 이벤트 전파, 다른 서비스로 신호 전송 등에 사용됩니다. 

 

 

 

구현 

RabbitMQ를 Spring Boot에 사용하기 위해 코드를 추가하겠습니다.

 

 

 

의존성 추가 

Spring Cloud Config 서버 의존성 추가  

// actuator
implementation 'org.springframework.boot:spring-boot-starter-actuator'

// bootstrap
implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap'

// amqp
implementation 'org.springframework.cloud:spring-cloud-starter-bus-amqp'

 

 

product 서버 의존성 추가 

// amqp
implementation 'org.springframework.cloud:spring-cloud-starter-bus-amqp'

 

 

 

 

설정 파일 추가 

Spring Cloud Config 서버 yml 파일 

spring:
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest

management:
  endpoints:
    web:
      exposure:
        include: health, busrefresh

 

health, busrefresh 엔드포인트를 추가합니다.

busrefresh 명령어를 통해 변경된 설정 파일을 사용하는 모든 서버들을 업데이트 할 것 입니다. 

 

 

전체 상태

더보기
server:
  port: 8888


spring:
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest
  application:
    name: config-service
  cloud:
    config:
      server:
        git:
          uri: https://github.com/cladren123/dotd_config

management:
  endpoints:
    web:
      exposure:
        include: health, busrefresh

 

 

 

 

product의 yml 파일

spring:

  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest

  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/dotd?serverTimezone=UTC&useUniCode=yes&characterEncoding=UTF-8
    username: root
    password: 비밀번호 
    
  jpa:
    hibernate:
      ddl-auto: create

  cache:
    type: redis
  redis:
    host: localhost
    port: 6379
    password: 비밀번호


management:
  endpoints:
    web:
      exposure:
        include: refresh, health, beans, busrefresh

RabbitMQ의 설정 정보와 actuator의 management의 busrefresh를 추가합니다. 

 

 

 

 

연결 테스트 

RabbitMQ 연결과 busrefresh 엔드포인트를 추가했으면 잘 작동하는지 확인해 보겠습니다. 

연결 테스트를 위해 Spring Cloud Config 서버와 테스트 할 서버(필자의 경우 product 서버)를 가동해야 합니다. 

 

설정 정보 원본 

변경 전 상태는 dev 입니다.

변경 전 env 상태는 dev

 

 

 

설정 정보 변경 

Git Repository의 설정 정보를 dev change로 변경했습니다. 

 

Config Server에서 변경 내용 확인

127.0.0.1:8888/product/dev

 

dev change로 바뀐 것을 확인할 수 있다.

 

 

변경 사항 업데이트 

busrefresh를 사용하여 설정 파일의 변경 사항을 해당 설정 파일을 사용하는 서버에 업데이트 하겠습니다. 

 

다음 형식으로 Rest API 요청을 보냅니다. (8080은 product 서버의 포트번호 입니다.)

Post 방식

127.0.0.1:8080/actuator/busrefresh

 

 

 

저는 PostMan을 사용했습니다. 

busrefresh

 

product 서버의 해당 요청을 보내면 연결된 RabbitMQ를 통해 다른 서버들도 업데이트 메세지가 전달되어 업데이트가 진행됩니다. 

 

dev change로 변경되었다.

 

busrefresh 이후 상태가 dev change로 변경된 것이 반영된 것을 확인할 수 있었습니다. 

 

 

 

 

마무리

이번에는 RabbitMQ를 Spring Cloud Bus로 활용하여 Spring Cloud Config 에서 관리하는 설정 정보가 변경되었을 때 일괄 업데이트하도록 구현했습니다.

감사합니다.