[Spring Cloud] Spring Cloud Bus์ RabbitMQ๋ฅผ ์ฌ์ฉํ์ฌ Config ์ ๋ณด ๋ฐ์ํ๊ธฐ
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๏ธโฃ ํ ์คํธ ํ๊ธฐ
- Start RabbitMQ Server
- Start Spring Cloud Config Service
- Start Eureka Discovery Service
- Start Spring Cloud Gateway Service
- 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