zuul과 다른 점 : 비동기 처리가 가능하여 최신 트렌드에 맞는 Function Programming 가능
Spring Cloud Routing 내 Gateway 디펜던시를 꼭 추가해준다.
properties 파일로 설정하는 방법과 Java 코드로 설정하는 방법 총 2가지가 있다.
server:
port: 8000
eureka:
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://localhost:8761/eureka
spring:
application:
name: apigateway-service
cloud:
gateway:
routes:
- id: first-service
uri: http://localhost:8081/
predicates:
- Path=/first-service/**
- id: second-service
uri: http://localhost:8082/
predicates:
- Path=/second-service/**
spring.cloud.gateway.routes
id
: 고유한 이름uri
: 어디로 포워딩할 것인지predicates
: 클라이언트의 조건(만족시 uri 항목으로 포워딩)http://localhost:8000/first-service/welcome 으로 접근하면 내부적으로
http://localhost:8081/first-service/welcome 으로 포워딩한다.
(zuul에서는 http://localhost:8081/welcome 으로 포워딩된다는 점에서 다르다.)
package com.example.apigatewayservice.config;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FilterConfig {
@Bean
public RouteLocator gatewayRoutes(RouteLocatorBuilder builder){
return builder.routes()
.route(r -> r.path("/first-service/**")
.uri("http://localhost:8081"))
.route(r -> r.path("/second-service/**")
.uri("http://localhost:8081"))
.build();
}
}
다른 프로젝트에서는 이렇게 Tomcat 서버가 작동했다면
여기에서는 Netty라는 비동기 방식의 서버가 작동한다는 로그를 확인할 수 있다.