시작이 반

[MSA] Spring Cloud ( Config, Cloud bus ) 본문

Programming/MSA

[MSA] Spring Cloud ( Config, Cloud bus )

G_Gi 2021. 8. 7. 21:00
SMALL

https://happycloud-lee.tistory.com/207

 

외부 Config 정보 바꾸기는 3가지가 있다.

- 서비스 재기동

- Actuator refresh

- Spring cloud bus

 

이전 포스트는 Actuator refresh까지 설명하였다.

Actuator refresh는 어플리케이션 서버가 한두개면 문제가 되지 않지만 수백개의 서비스가 있을경우 각각의 어플리케이션마다 다 refresh를 수동으로 해줘야 하기 때문에 번거롭다.

 

 

이보다 더 편한 방법은 3번째 방법인 Spring cloud bus를 이용하면 된다. 이방법은 한쪽에서 refresh를 config와 연결된 모든 서비스를 refresh를 해주는 방법이다.

 

상태 및 구성에 대한 변경사하으 연결된 노드에게 전달한다. (Broadcast)

 

구현방법

  • AMQP : 메시지 지향 미들웨어를 위한 개방형 표준 응용 계층 프로토콜
    • 메시지 지향, 큐잉, 라우팅, 신롸성, 보안
    • Erlang, RabbitMQ에서 사용
  • Kafka
    • Apachec Software Foundation이 Scalar 언어로 개발한 오픈 소스 메시지 브로커 프로젝트
    • 분산형 스트리밍 플랫폼
    • 대용량의 데이터를 처리 가능한 메시징 시스템

 

메시지 큐잉서비스

RabbitMQ ( 적은데이터 안전 )

 - 메시지 브로커

 - 초당 20+ 메시지를 소비자에게 전달

 - 메시지 전달 보장, 시스템 간 메시지 전달

 - 브로커, 소비자 중심

Kafka ( 대용량 )

 - 초당 100k+ 이상의 이벤트 처리

 - pub/sub, Topic에 메시지 전달

 - Ack를 기다리지 않고 전달 가능

 - 생산자 중심

 

결과로 HTTP POST/busrefresh 를 통해 연결된 모든 노드들을 refresh한다.

만약 user-service의 설정정보가 바꼈다고하면 아무서버에서 /busfresh를 하면 연결된 모든 노드를 refresh를 한다.

 

 

RabbitMQ를 통해 구현해보자

우선 윈도우사용자는 RabbitMQ와 Erlang을 설치한다. ( 설치방법은 찾아보자... )

 

서버를 실행해놓아야 한다.

15672포트로 들어가보면 해당 화면이 나온다.

초기

id : guest

pw : guest

 

 

 

모든 서비스에는 해당 디펜던시를 추가한다. (config, gateway, user, order, catalog)

또한 연결된 모든 노드에 RabbiMq 설정정보를 추가한다. (포트번호는 5672번임)

또한 actuator 의 end point에 busrefresh를 추가해준다.

 

 

 

이제 확인해보자....

실행은 rabbimq서버가 실행되어 있어야하고 discovery, config를 순서대로 먼저 실행해준다.

그 다음 각 서비스들을 실행해준다.

user-service의 설정값을 변경하고 order-service에서 busrefresh를 통해 변경이 되는지 확인해 보겠다.

 

 

User-service의 설정 파일 정보 test2.yml

test 정보는 "test2"라고 되어있음

test2가 나온다.

 

 

이제 바꿔보자....

우선 yml파일은 바꾸고 config서버의 정보를 확인해보자

잘 바껴있다. ( 아직 서비스 값은 바껴있지 않음 ) 

 

그러면 이제 바뀐값을 적용하기 위해 busrefresh를 사용하여 적용시켜보자 

노드로 이어진 어디서든 호출하면된다. ( config, gateway, user, order, catalog ) 

order-service에서 호출해보자

204status를 주면서 성공한것을 볼 수 있다.

 

그러면 user-service의 값이 변경됐는지 확인해보자.

변경이 잘되었다.

 

 

 

<참고 : Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)>

LIST