MSA 가장 앞단에서 클라이언트로부터 오는 요청 알맞게 각 서비스에 전달
항상 무중단 상태로 모든 요청 받아야 함.
<특성>
이전의 스프링부트, Eureka, Config 들은 블로킹 기반 → 모두 톰캣 엔진.
But 게이트웨이는 비지니스 로직 처리보단 단순히 지나가는 통로의 역할 (I/O 처리)
→ 논 블로킹 방식의 WebFlux, 네티 엔진 사용.
→ 이 경우 기존의 JPA 같은 블로킹 방식 사용할 수없음!
<프로젝트 생성>
<라우팅 전략>
다양한 라우팅 전략이 존재.
path route 기반으로 진행해보자 : https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#the-path-route-predicate-factory
게이트웨이 라우팅 설정
# 8080으로 들어오는 요청을 8081, 8082로 라우팅
# <http://localhost:8080/ms1/start>
server.port=8080
spring.cloud.gateway.routes[0].id=ms1
spring.cloud.gateway.routes[0].predicates[0].name=Path
spring.cloud.gateway.routes[0].predicates[0].args.pattern=/ms1/**
spring.cloud.gateway.routes[0].uri=http://localhost:8081
spring.cloud.gateway.routes[1].id=ms2
spring.cloud.gateway.routes[1].predicates[0].name=Path
spring.cloud.gateway.routes[1].predicates[0].args.pattern=/ms2/**
spring.cloud.gateway.routes[1].uri=http://localhost:8082
@Configuration
public class CustomRoute {
// 라우팅 설정 빈 등록
@Bean
public RouteLocator cRoute(RouteLocatorBuilder builder) {
return builder.routes()
.route("ms1", r -> r.path("/ms1/**")
.uri("<http://localhost:8081>"))
.route("ms2", r -> r.path("/ms2/**")
.uri("<http://localhost:8082>"))
.build();
}
}
<게이트웨이 Eureka 로드밸런싱>
게이트웨이와 Eureka 서버 연동 이유?