본 포스팅은 인프런 Dowon Lee님의
Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) 강의를 토대로 작성되었습니다.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4
이전까지 원하는대로 포워딩된 것을 확인하였으니
이제 EurekaServer에 등록하고 LoadBalancer를 이용해보자.
ServiceDiscovery / Load Balancer
- ServiceDiscovery
클라이언트나 다른 서버가 IP주소,포트가 아닌
서버스 이름으로 요청 시 해당 서비스 이름을 가진 인스턴스를 찾는 역할을 수행
- LoadBalancer
응답이 가능한 인스턴스중 적절한것을 선택하여
요청을 전달함
APIGateWay 파일의 application.yml 포워딩할 uri를
기존 http://127.0.0.1:8081 과 같은 형태에서
lb://{ServiceName} 으로 변경이 필요하다.
* 예제의경우
http://127.0.0.1:8081 에서
lb://MY-FIRST-SERVICE 로 변경
application.yml
#생략
routes:
- id: first-service # id지정
# uri: http://127.0.0.1:8081/ #포워딩할 uri
uri: lb://MY-FIRST-SERVICE #등록된 MicroService 이름
predicates:
- Path=/first-service/**
filters:
- MyCustomFilter
- id: second-service
# uri: http://127.0.0.1:8082/
uri: lb://MY-SECOND-SERVICE
predicates:
- Path=/second-service/**
filters:
- MyCustomFilter
- name: LoggingFilter
args:
baseMessage: Hi Logger!
preLogger: true
postLogger: true
#생략
호출이 정상적으로 수행됨을 확인할 수 있다.
https://velog.io/@hana0627/MSA-API-Gateway-Service-1
포워딩 기능역시 IP주소를 직접 입력하는것이 아니라,
이름으로 검색하여 ServiceDiscovery 가 해당 서비스를 찾아준다.
FIRST-SERVCIE , SECOND-SERVICE를 두개씩 실행시켜본다.
MY-FIRST-SERVICE 호출을 통해서 어느 인스턴스에서 응답을 처리하는지 확인해보자
MyFirstServiceController
@GetMapping("/check")
public String check(HttpServletRequest request) {
log.info("Server port = {}" , request.getServerPort());
return "Hi there. This is a message from First Service ON PORT " + env.getProperty("local.server.port");
}
매 요청시 번갈아가면서 인스턴스가 동작함을 확인할 수 있다.
- API Gateway
요청을 한곳에서 처리- ServiceRouter
요청을 다른 서비스로 전달- ServiceDiscovery
IP주소, Port가 아닌 이름으로 서비스를 등록하여 검색- LoadBalanacer
응답이 가능한 인스턴스를 적절히 선택하여 요청전달- 보안정책 및 로깅
등의 ServiceMash 기능을 손쉽게 구현할 수 있게되었다.
이후 강의내용은 실제 서비스 구축에 대한 내용으로
관련되어 기록해야 할 정보가 있다면 추가하되
강의내용을 정리해서 포스팅은 하지 않겠습니다.
읽어주셔서 감사합니다.