일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Sysinternals
- spring cloud config
- HLS
- VSCode
- Kubernetes
- configmap
- namespace
- Shell script
- Pod
- deployment
- Windows10
- android studio
- 행정구역분류
- Java
- ebpf
- kubectl
- dart
- aws cli
- golang
- Flutter
- RTMP
- aws
- Python
- docker
- macos
- Android
- wireshark
- ffmpeg
- service
- nginx-media-server
- Today
- Total
woonizzooni
Spring Cloud Bus 동작 확인 본문
TL;DR
> 구현체 / 참고 소스
https://github.com/woonizzooni/spring-cloud-config-concept
> 실행 환경
- RabbitMQ 실행 (Docker 활용)
- 로컬저장소 vs GitHub저장소 방식 선택
'GitHub 저장소 & WebHooks 설정' or '로컬저장소 & 'POST /monitor'' 방식
- Config서버, 2개 이상의 Client 실행 (bus활성화)
> 동작 확인
- 외부 저장소의 특정 앱의 설정파일 수정
- GitHub 저장소 이용 방식의 경우 자동으로 특정 앱의 설정 갱신이 이뤄지는지 확인
- 로컬 방식의 경우 Config서버로 'POST /monitor' 요청 후
특정 앱의 설정 갱신이 이뤄지는지 확인
Spring Cloud Bus
https://spring.io/projects/spring-cloud-bus
https://spring.io/projects/spring-cloud-bus#learn
https://spring.io/projects/spring-cloud-bus#samples
이전 게시글 "Spring Cloud Config의 동작"에서는
외부에 있는 특정 앱 설정 파일 변경시 특정 앱에 refresh하라고 직접 요청했었는데,
Spring Cloud Bus를 사용해서 자동 갱신되는 기능을 확인해본다.
#learn Doc에서 SpringCloudBus를 '분산시스템 노드간 메시지브로커와의 링크/연결'로 소개.
AMQP broker과 kafka를 지원하는 듯 하고, 어디선가 보면 redis도 지원한다던데
AMQP 구현체 중 rabbitmq를 선택해서 확인해보자.
0. 구현체 / 참고 소스
https://github.com/woonizzooni/spring-cloud-config-concept
cloud-bus-config-server |
1. 구동 환경 관련
- RabbitMQ 구축/실행 : 도커 컨테이너를 활용하자. (웹 관리자 화면은 15672포트, 연동은 5672포트)
https://hub.docker.com/_/rabbitmq
docker run -d --name rabbitmq \
-p 5672:5672 -p 15672:15672 --restart=unless-stopped \
-e RABBITMQ_DEFAULT_USER=username -e RABBITMQ_DEFAULT_PASS=password \
rabbitmq:3-management
- 본인PC에서 동작 확인하고 싶은데 GitHub의 WebHooks연동에 문제가 있다면 로컬환경으로 확인하자.
* Config서버 서비스 포트가 공인만에 노출될 수 있어야 함.
* cloud-bus-config-server/src/main/resources/bootstrap.yml : 각 경우별 선택 예
[1] GitHub저장소의 Webhooks 이용시 | [2] 로컬환경(개인 PC-사설망)에서 테스트 |
.... spring: #profiles: # active: native cloud: config: #server: # native: # search-locations: D:/Workspace/spring-cloud-config-concept/repos.d server: git: uri: https://github.com/woonizzooni/spring-config-repo .... |
.... spring: profiles: active: native cloud: config: server: native: search-locations: D:/Workspace/spring-cloud-config-concept/repos.d #server: # git: # uri: https://github.com/woonizzooni/spring-config-repo .... |
2. 앱 구동시 동작 과정
1) Config서버 : 설정파일 위치를 내 로컬 or github로 설정, rabbitmq에 springCloudBus 토픽 생성&구독
2) Client (고객/상품) : Config서버로 설정파일 요청, rabiitmq의 springCloudBus 토픽 채널 구독
** 3번의 로딩이 이뤄졌는데 이 중 health indicator는 off시켜서 1개는 제거함 **
동작 확인 중에 dev/prod/stg등으로 profile 구분했더니 client의 자동갱신이 동작되지 않더라.
로그레밸 debug로 켜고 확인해보니 확실히 rabbitmq로부터 이벤트 메시지는 수신된 것이 확실하나,
spring boot 앱이 갱신을 하지 않는 것!
나와 유사한 경우를 찾아봤다.
"Bus client with multiple active profiles does not match RemoteApplicationEvent #62"
https://github.com/spring-cloud/spring-cloud-bus/issues/62
처음부터 application-dev.yml등으로 확인했으니 default(application.yml) 동작을 확인해봤다.
오~ 동작하네! 자동갱신이 이뤄졌다.
profile구분된 경우 app이 이벤트를 수신했으나, 뭔가? match되지 않아 갱신하지 않았던 것 같다.
버근가 내 환경 탓인가... 싶다가 그냥 default라도 동작확인했으니 일단 넘어가자.
3. 특정 서비스 앱의 설정 변경시 해당 앱 설정 갱신 동작 확인
1) 로컬 환경 구성인 경우
- 고객서비스앱의 현재 설정 상태 확인
- 고객서비스 앱 설정 파일 수정
- Config서버로 POST메소드로 /monitor 호출
curl예)
curl -v -X POST "http://localhost:10010/monitor" \
-H "Content-Type: application/json" \
-H "X-Event-Key: repo:push" \
-H "X-Hook-UUID: webhook-uuid" \
-d '{"push": {"changes": []} }'
- springCloudBus토픽 구독 등록한 앱에 이벤트가 수신되는지 확인 (debug 로그로 확인 or 패킷으로)
- 고객서비스 앱만 갱신하는지 확인 (Config서버로 요청하는지)
2) GitHub 저장소 WebHooks 구성인 경우
- 저장소의 WebHooks url등록
ㄱ. Payload URL : Config서버 /monitor 등록 (예: http://my_config_server:8080/monitor)
** bus-refresh 등록하면 안됨. monitor여야 함 **
ㄴ. Content type: application/json 선택
ㄷ. 트리거 기준 선택 (just the push event)
- GitHub저장소의 설정 파일 수정 (push or commit등)
- Config서버 : Github로부터의 /monitor 요청 수신으로 RabbitMQ와의 이벤트 송/수신 상태 확인
- springCloudBus토픽 구독 등록한 앱에 이벤트가 수신되는지 확인 (debug 로그로 확인 or 패킷으로)
- 고객서비스 앱만 갱신하는지 확인 (Config서버로 요청하는지)
[참고]
https://spencer.gibb.us/blog/2015/09/24/spring-cloud-config-push-notifications/
https://github.com/spring-cloud/spring-cloud-bus
https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
https://github.com/spring-cloud/spring-cloud-bus/issues/62
https://github.com/spring-cloud/spring-cloud-config/issues/733
'Spring' 카테고리의 다른 글
Spring Cloud Config 동작 확인 (0) | 2019.07.06 |
---|---|
Spring Cloud Config "fetching config from server at:" (0) | 2019.07.05 |
InetUtils : Cannot determine local hostname (0) | 2019.06.23 |