Spring Framework/โ˜๏ธ Spring Cloud

[Spring Cloud] Spring Cloud Bus์™€ RabbitMQ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Config ์ •๋ณด ๋ฐ˜์˜ํ•˜๊ธฐ

soogoori 2023. 11. 27. 09:04

Configuration ์„œ๋ฒ„์—์„œ ์–ด๋– ํ•œ ๊ฐ’์„ ๋ณ€๊ฒฝ์‹œ์ผฐ์„ ๋•Œ microservices์— ๋ฐ˜์˜์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ ์ด์ „์—๋Š” actuator๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ๊ฐ๊ฐ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋งˆ๋‹ค ์ˆ˜๋™์œผ๋กœ refresh ์‹œ์ผœ์ฃผ์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋‹นํžˆ ๋ฒˆ๊ฑฐ๋กญ๋‹ค.

 

์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์„ ๊ฐœ์„ ์‹œ์ผœ์ฃผ๋Š” ๊ฒƒ์ด Spring Cloud Bus ์ด๋‹ค. 

 

โ“Spring Cloud Bus๋ž€ ?

๋ถ„์‚ฐ์‹œ์Šคํ…œ์˜ ๋…ธ๋“œ(microservice)๋ฅผ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค(RabbitMQ)์™€ ์—ฐ๊ฒฐํ•˜์—ฌ ์ƒํƒœ ๋ฐ ๊ตฌ์„ฑ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ์—๊ฒŒ ์ „๋‹ฌํ•ด์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. 

 

๐Ÿ’ก ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ž€?

๐Ÿ‘‰ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ์‹œ์Šคํ…œ ๋ฐ ์„œ๋น„์Šค๊ฐ€ ์„œ๋กœ ๊ฐ„์— ํ†ต์‹ ํ•˜๊ณ  ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฒ€์ฆ, ์ €์žฅ, ๋ผ์šฐํŒ…ํ•˜๊ณ  ์ด๋ฅผ ์ ์ ˆํ•œ ๋Œ€์ƒ์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.

 

 

RabbitMQ ์‚ฌ์šฉํ•˜๊ธฐ 

 

 

๐Ÿ’ก RabbitMQ๋ž€?

 

AMQP(Advanced Message Queuing Protocol)๋ฅผ ๋”ฐ๋ฅด๋Š” ์˜คํ”ˆ์†Œ์Šค ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋กœ์„œ Message Queue๋ฅผ ํ†ตํ•ด ์›ํ•˜๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

  • Producer : ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ธ๋‹ค.
  • Broker : ์ค‘๊ฐœ์ž ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์˜ ๋กœ๋“œ ๋ฐ ์ „๋‹ฌ ์‹œ๊ฐ„์„ ์ค„์—ฌ์ค€๋‹ค. 
  • Consumer : ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•œ๋‹ค.

 

 

RabbitMQ๋ฅผ ์˜ˆ์ œ์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ์œ„์™€ ๊ฐ™๋‹ค. 

 

 

AMQP ์‚ฌ์šฉํ•˜๊ธฐ 

 

RabbitMQ ์„ค์น˜๋ฅผ ๋งˆ์นœ ํ›„์ด๋‹ค. 

 

1๏ธโƒฃ Dependencies ์ถ”๊ฐ€ โž” Config server, Users Microservice, Gateway Service

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

 

2๏ธโƒฃ application.yml ์ˆ˜์ • โž” Config server, Users Microservice, Gateway Service

spring:
  application:
    name: apigateway-service
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest

 

RabbitMQ์— ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. 

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

busrefresh๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

config-server์— ๋ณ€๊ฒฝ ์š”์ฒญ์‚ฌํ•ญ์ด ๋“ค์–ด์˜ค๋ฉด RabbitMQ์— ์š”์ฒญ์‚ฌํ•ญ์„ ๋ฐ›์•˜์Œ์„ ํ†ต๋ณดํ•œ๋‹ค.

RabbitMQ์— ๋“ฑ๋ก๋œ ๋‹ค๋ฅธ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์—๊ฒŒ ๊ทธ ์ •๋ณด๋ฅผ ์ผ๊ด„์ ์œผ๋กœ pushํ•œ๋‹ค.

 

3๏ธโƒฃ ํ…Œ์ŠคํŠธ ํ•˜๊ธฐ 

  1. Start RabbitMQ Server
  2. Start Spring Cloud Config Service
  3. Start Eureka Discovery Service
  4. Start Spring Cloud Gateway Service
  5. Start Users Microservice

 

 

Spring Cloud Bus ํ…Œ์ŠคํŠธ

RabbitMQ๋ฅผ ์‹คํ–‰์‹œํ‚จ ํ›„ ์ฃผ์†Œ์ฐฝ์— 127.0.0.1:15672๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ž˜ ์ ‘์†๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

config-service๋ฅผ ์‹คํ–‰์‹œํ‚ค๋ฉด RabbitMQ๊ฐ€ ์ž˜ ๋“ฑ๋ก๋˜์—ˆ๊ณ , 5672๋ฒˆ์œผ๋กœ ์ ‘์†๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 


ํ˜„์žฌ, config-service์— ์žˆ๋Š” application.ymlํŒŒ์ผ์ด๋‹ค.

์ด ํŒŒ์ผ์— ์žˆ๋Š” token.secret ๊ฐ’์„ ๋‹ค๋ฅธ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ํ•ด๋ณผ ๊ฒƒ์ด๋‹ค.

 

 

Postman์„ ์ด์šฉํ•˜์—ฌ ์œ ์ € ๋“ฑ๋ก์„ ํ•œ ํ›„ ๋กœ๊ทธ์ธ์„ ํ•ด์„œ token ๊ฐ’์„ ์–ป๋Š”๋‹ค.

token ๊ฐ’์„ health_check ํ›„ ํ™•์ธํ•ด๋ณด๋ฉด user_token_native_application_changed_#1 ์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 


์ด์ œ #1์„ #2๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ์ด ์ œ๋Œ€๋กœ ๋ฐ˜์˜๋˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž. 

 

busrefresh๋ฅผ ์ „๋‹ฌํ•˜๊ฒŒ ๋˜๋ฉด ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ 204 No Content์„ ์–ป๊ฒŒ ๋œ๋‹ค. 

user-service๋ฅผ ์—…๋ฐ์ดํŠธํ–ˆ์œผ๋ฏ€๋กœ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ๊ฐฑ์‹ ๋˜์—ˆ๋‹ค๋Š” ๋‚ด์šฉ์„ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

 

user-service์—์„œ ํ˜ธ์ถœํ–ˆ์ง€๋งŒ apigateway-service์—์„œ๋„ ๋™์ผํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด user microservice์— ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์„ ์•Œ๋ ธ์„ ๋•Œ rabbitMQ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ ๋ชจ๋“  ๊ณณ์— ํ•ด๋‹นํ•˜๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘ธ์‹œ ๊ธฐ๋Šฅ์œผ๋กœ ์ „๋‹ฌ๋˜์—ˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

์ฐธ๊ณ 

https://www.ibm.com/kr-ko/topics/message-brokers

https://www.rabbitmq.com/tutorials/tutorial-one-java.html

https://www.cloudamqp.com/blog/part1-rabbitmq-for-beginners-what-is-rabbitmq.html