Spring Cloud로 개발하는 MSA/API Gateway Service

Spring Cloud Gateway - Load Balancer

webmaster 2022. 5. 3. 17:17
728x90

Eureka - SpringCloudGateWay 연동

동작과정

Pom.xml

SpringCloudGateway, FirstService, SecondService 유레카 추가

  • Eureka Clent를 사용할 것이기 때문에 EurekaClient Dependency를 추가해 준다.
  • FirstService, SecondService도 모두 등록시켜 주어야 한다.

application.yml

SpringCloudGateway, FirstService, SecondService  application.yml에 유레카 클라이언트로 등록
SPringCloudGateway의 URI를 MSA로 변경시켜 준다. -> lb://서비스이름

  • SpringCloudGateway를 Eureka Cilent로 등록시킨다.
  • SpringCloudGateway의 uri를 MSA로 변경하여 준다.
  • lb://MSA이름으로 URI를 변경하여 주면 해당 Gateway가 해당 MSA로 Eureka 서버를 통해 전달받게 된다.

Eureka 서버에 잘 등록된걸 확인할 수 있다.

같은 서비스를 여러 번 실행시키기

IntelliJ 종속적 실행

Edit Config를 통해 파라미터로 서버 포트 전달

  • IntelliJ에 종속적으로 다른 Port 번호로 애플리케이션을 실행할 수 있다.
    • 매번 실행 시마다 -Dserver.port를 VM -option으로 전달해 주어야 한다

maven build 후 파라미터로 포트 전달

maven 빌드 후 target 파일생성후
target 파일 실행

  • Maven을 통해 build를 한 뒤 jar 파일을 실행하는 시점에 -Dserver.port를 전달하여 원하는 Port로 실행한다.

Random Port

port를 0으로 준다
Port를 0으로 주게 되면 같은 인스턴스를 공유하는 문제가 있기 때문에 instance-id를 다르게 random으로 준다.

  • port를 0번을 주어 랜덤 포트로 실행시킬 수 있다.

Port Log 남기기

어떤 인스턴스를 실행시키는지 확인할 방법이 없기 때문에 어떤 Port를 실행시키는지 log를 남기자

환경 변수를 주입 받는다.
check메소드를 통해 어떤 포트가 실행되는지 확인한다.

  • @RequiredArgConstructor를 사용하여 생성자를 통해 환경변수를 주입받는다.
    • 환경 변수의 getProperty 메서드를 통해 Port 번호를 가지고 오면 된다.
    • yml의 값을 가져오는 것이 아닌 실제 할당받은 값을 가지고 올 것이기 때문에 local.server.port 값을 가지고 온다.
  • Eureka Server가 라운드 로빈 방식으로 적정한 인스턴스를 선택해서 실행시켜 준다.

https://ko.wikipedia.org/wiki/%EB%9D%BC%EC%9A%B4%EB%93%9C_%EB%A1%9C%EB%B9%88_%EC%8A%A4%EC%BC%80%EC%A4%84%EB%A7%81

 

라운드 로빈 스케줄링 - 위키백과, 우리 모두의 백과사전

 

ko.wikipedia.org

 

728x90