티스토리 뷰
- Spring Cloud Bud
- RabbitMQ 설치
- 프로젝트 수정 - Actuator
- 테스트
Spring cloud bus 사용함으로써, 분산 시스템의 노드(MS)를 경량 메시지 브로커(RabbitMQ)와 연결하여 상태 및 구성에 대한 변경 사항을 연결된 노드에게 전달(Broadcast)할 수 있다.
Spring Cloud Bus가 Spring Cloud Config Server 에 변경된 설정 정보를 Push하면 (HTTP POST /busrefresh)
Spring Cloud Config Server 는 설정정보를 update하여 연결된 MS들에게 변경사항을 전달한다.
MS에게 전달해도 전체 반영이된다. 자세한 내용은 실습을 통해 알아볼것이다.
Section7에서처럼 MS 하나씩 refresh할 필요가 없어진다.
Spring Cloud Bus
AMQP (Advanced Message Queuing Protocol)
- 메시지 지향 미들웨어를 위한 개방형 표준 응용 계층 프로토콜이다.
- 메시지지향, 큐잉, 라우팅(P2P, Publisher-Subcriber), 신뢰성, 보안
- RabbitMQ에서 사용한다.
Kafka 프로젝트
- Apache Software Foundation이 Scalar 언어로 개발한 오픈소스 메시지 브로커 프로젝트
- 분산형 스트리밍 플랫폼
- 대용량의 데이터를 처리 가능한 메시징 시스템
메시지 큐잉 서비스 대표 2가지
RabbitMQ | Kafka |
메시지 브로커 초당 20+ 메시지를 소비자들에게 전달 메시지 전달 보장, 시스템 간 메시지 전달 브로커, 소비자 중심이다. |
초당 100k+ 이상의 이벤트를 처리 Pub/Sub, Topic에 메시지 전달 Ack를 기다리지 않고 전달 가능하다 생산자 중심 |
RabbitMQ 설치
brew update
brew install rabbitmq
geumbit@gimgeumbich-ui-MacBookPro sbin % brew --prefix rabbitmq
/opt/homebrew/opt/rabbitmq
geumbit@gimgeumbich-ui-MacBookPro sbin % cd /opt/homebrew/opt/rabbitmq/sbin/
geumbit@gimgeumbich-ui-MacBookPro sbin % ./rabbitmq-server
Username : guest
Password : guest
AMQP (Advanced Message Queuing Protocol)
해당 작업은 아래 리스트들에 추가할 것이다.
- Start RabbitMQ Server
- Start Spring Cloud Config Service
- Start Eureka Discovery Service
- Start Spring Cloud Gateway Service
- Start User Microservice
config-service
config-service, user-service, apigateway-service - pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
config-service, user-service, apigateway-service - application.yml
rabbitmq:
host: 127.0.0.1
port: 5672
username: guest
password: guest
management:
endpoints:
web:
exposure:
include: health, busrefresh
busrefresh
1. configuration 서버에 변경 요청사항이 들어오게되면,
2. 자신이 rabbitmq에게 요청사항받음을 통보하고
3. rabbitmq에 등록된 연결된 MS들을 일괄적으로 Push해준다.
그럼 정말 Rabbitmq가 변경을 확인하여 MS들을 일괄로 변경해주는지 확인해본다
1. ~/msa-config/application.yml 파일 수정
변경 전 token: expiration_hours: 24 secret: change-value2-default-application gateway: ip: 172.30.1.88 |
변경 후 token: expiration_hours: 24 secret: change gateway: ip: 172.30.1.88 |
teken.secret값을 바꾸면 실시간으로 config-service 에 내용이 적용이 된다
하지만 apigateway-service 의 경우, 실시간으로 적용이 안된다.
이를 실시간으로 적용하기 위해서는 apigateway-service 혹은 user-service에 아래와 같이 busrefresh를 날린다.
그렇게되면 응답으로 204 코드가 표시되면서 userservice에 아래와 같은 로그가 표시된다
2023-05-29 17:18:06.570 INFO 36385 --- [o-auto-1-exec-2] o.s.cloud.bus.event.RefreshListener : Received remote refresh request.
2023-05-29 17:18:06.614 INFO 36385 --- [o-auto-1-exec-2] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
2023-05-29 17:18:06.677 INFO 36385 --- [o-auto-1-exec-2] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : <http://127.0.0.1:8888>
2023-05-29 17:18:06.712 INFO 36385 --- [o-auto-1-exec-2] c.c.c.ConfigServicePropertySourceLocator : Located environment: name=ecommerce, profiles=[prod], label=null, version=null, state=null
2023-05-29 17:18:06.712 INFO 36385 --- [o-auto-1-exec-2] b.c.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource {name='bootstrapProperties-configClient'}, BootstrapPropertySource {name='bootstrapProperties-file:/Users/geumbit/study/msa-config/ecommerce-prod.yml'}, BootstrapPropertySource {name='bootstrapProperties-file:/Users/geumbit/study/msa-config/ecommerce.yml'}, BootstrapPropertySource {name='bootstrapProperties-file:/Users/geumbit/study/msa-config/application.yml'}]
2023-05-29 17:18:06.716 INFO 36385 --- [o-auto-1-exec-2] o.s.boot.SpringApplication : The following profiles are active: prod
2023-05-29 17:18:06.722 INFO 36385 --- [o-auto-1-exec-2] o.s.boot.SpringApplication : Started application in 0.148 seconds (JVM running for 97.749)
2023-05-29 17:18:06.952 INFO 36385 --- [o-auto-1-exec-2] com.netflix.discovery.DiscoveryClient : Shutting down DiscoveryClient ...
2023-05-29 17:18:09.965 INFO 36385 --- [o-auto-1-exec-2] com.netflix.discovery.DiscoveryClient : Unregistering ...
2023-05-29 17:18:09.977 INFO 36385 --- [o-auto-1-exec-2] com.netflix.discovery.DiscoveryClient : DiscoveryClient_USER-SERVICE/user-service:39b1f7d8d71b73e4138427701d28b3f4 - deregister status: 200
2023-05-29 17:18:09.993 INFO 36385 --- [o-auto-1-exec-2] com.netflix.discovery.DiscoveryClient : Completed shut down of DiscoveryClient
2023-05-29 17:18:09.997 INFO 36385 --- [o-auto-1-exec-2] o.s.c.n.eureka.InstanceInfoFactory : Setting initial instance status as: STARTING
2023-05-29 17:18:10.000 INFO 36385 --- [o-auto-1-exec-2] com.netflix.discovery.DiscoveryClient : Initializing Eureka in region us-east-1
2023-05-29 17:18:10.000 INFO 36385 --- [o-auto-1-exec-2] c.n.d.s.r.aws.ConfigClusterResolver : Resolving eureka endpoints via configuration
2023-05-29 17:18:10.004 INFO 36385 --- [o-auto-1-exec-2] com.netflix.discovery.DiscoveryClient : Disable delta property : false
2023-05-29 17:18:10.004 INFO 36385 --- [o-auto-1-exec-2] com.netflix.discovery.DiscoveryClient : Single vip registry refresh property : null
2023-05-29 17:18:10.004 INFO 36385 --- [o-auto-1-exec-2] com.netflix.discovery.DiscoveryClient : Force full registry fetch : false
2023-05-29 17:18:10.004 INFO 36385 --- [o-auto-1-exec-2] com.netflix.discovery.DiscoveryClient : Application is null : false
2023-05-29 17:18:10.004 INFO 36385 --- [o-auto-1-exec-2] com.netflix.discovery.DiscoveryClient : Registered Applications size is zero : true
2023-05-29 17:18:10.004 INFO 36385 --- [o-auto-1-exec-2] com.netflix.discovery.DiscoveryClient : Application version is -1: true
2023-05-29 17:18:10.004 INFO 36385 --- [o-auto-1-exec-2] com.netflix.discovery.DiscoveryClient : Getting all instance registry info from the eureka server
2023-05-29 17:18:10.035 INFO 36385 --- [o-auto-1-exec-2] com.netflix.discovery.DiscoveryClient : The response status is 200
2023-05-29 17:18:10.038 INFO 36385 --- [o-auto-1-exec-2] com.netflix.discovery.DiscoveryClient : Starting heartbeat executor: renew interval is: 30
2023-05-29 17:18:10.040 INFO 36385 --- [o-auto-1-exec-2] c.n.discovery.InstanceInfoReplicator : InstanceInfoReplicator onDemand update allowed rate per min is 4
2023-05-29 17:18:10.042 INFO 36385 --- [o-auto-1-exec-2] com.netflix.discovery.DiscoveryClient : Discovery Client initialized at timestamp 1685348290042 with initial instances count: 2
2023-05-29 17:18:10.044 INFO 36385 --- [o-auto-1-exec-2] o.s.c.n.e.s.EurekaServiceRegistry : Unregistering application USER-SERVICE with eureka with status DOWN
2023-05-29 17:18:10.045 INFO 36385 --- [o-auto-1-exec-2] com.netflix.discovery.DiscoveryClient : Saw local status change event StatusChangeEvent [timestamp=1685348290045, current=DOWN, previous=STARTING]
2023-05-29 17:18:10.046 INFO 36385 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_USER-SERVICE/user-service:1bf83c22248c5dd0f76f8fddbfff9bdb: registering service...
2023-05-29 17:18:10.046 INFO 36385 --- [o-auto-1-exec-2] o.s.c.n.e.s.EurekaServiceRegistry : Registering application USER-SERVICE with eureka with status UP
2023-05-29 17:18:10.046 INFO 36385 --- [o-auto-1-exec-2] com.netflix.discovery.DiscoveryClient : Saw local status change event StatusChangeEvent [timestamp=1685348290046, current=UP, previous=DOWN]
2023-05-29 17:18:10.047 INFO 36385 --- [o-auto-1-exec-2] o.s.cloud.bus.event.RefreshListener : Keys refreshed []
2023-05-29 17:18:10.063 INFO 36385 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_USER-SERVICE/user-service:1bf83c22248c5dd0f76f8fddbfff9bdb - registration status: 204
2023-05-29 17:18:10.063 INFO 36385 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_USER-SERVICE/user-service:1bf83c22248c5dd0f76f8fddbfff9bdb: registering service...
2023-05-29 17:18:10.066 INFO 36385 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_USER-SERVICE/user-service:1bf83c22248c5dd0f76f8fddbfff9bdb - registration status: 204
자세히 보면
DiscoveryClient_USER-SERVICE/user-service:1bf83c22248c5dd0f76f8fddbfff9bdb - registration status: 204
라는 문구가 표시되어 있으며 이와함께 apigateway-service에서도 다음과 같이 표시된다.
~~ 생략 ~~
DiscoveryClient_APIGATEWAY-SERVICE/192.168.0.15:apigateway-service:8000 - registration status: 204
~~ 생략 ~~
apigateway-service 역시 204 응답이 받아지면서 application.yml 수정내용이 적용됨을 알 수 있다.
'MSA' 카테고리의 다른 글
Section 10: 마이크로서비스간 통신 (0) | 2023.06.07 |
---|---|
Section 9: 암호화 처리를 위한 Encryption과 Decryption (0) | 2023.06.07 |
Section 7: Configuration Service (0) | 2023.06.07 |
Section 6: Users Microservice-2 (1) | 2023.06.07 |
Section 4: Users Microservice -1 (0) | 2023.06.07 |
- Total
- Today
- Yesterday
- MAC
- ngnix
- stream
- springboot
- JPA
- AnnotationConfigApplicationContext
- Vue
- mvn
- 차이
- BeanFactory
- 자바8
- docker
- lambda
- Intellij
- install
- Vuex
- webpack
- 영속성 컨텍스트
- ApplicationContext
- map
- NPM
- nginx
- container
- 람다
- 최종연산
- 스트림
- elasticsearch
- vscode
- java
- 중간연산
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |