Gateway
사용자의 요청을 각각의 서비스로 전달해주는 역할을 한다 (교통정리)
만들어놓은 Ureka server에 요청을 전달해야 함으로 Eureka client로 프로젝트를 생성해야 한다
Cateway의 yml
server:
port: 8000
eureka:
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: <http://192.168.0.16:8761/eureka>
spring:
application:
name: gateway-service
cloud:
gateway:
routes:
# 해당 작업을 수행하는 라우터의 id값
- id: first-service
# 앞으로 들어오는 요청중 first/로 들어오는 모든 요청은 해당 ip와 port버튼을 가진 서버로 이동해서 작업할것
uri: <http://127.0.0.1:9100/>
predicates:
- Path=/first/**
# 같은 방법으로 연동할 서버를 추가해준다
- id: second-service
uri: <http://127.0.0.1:9200/>
predicates:
- Path=/second/**
하지만 해당 class처럼 config를 설정해서 사용하는 방법도 있다
package com.example.gatewayservice.config;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
public class GatewayFilterConfig {
// RouteLocatorBuilder를 이욯해서 route 정보와 filter정보를 담고 있는
// RouteLocator 객체를 만들어서 리턴하도록 작업 @Bean으로 등록해야
// 스프링이 관리하는 객체가 된다. 그냥 생성만 하면 스프링이 인식하지 못함
@Bean
public RouteLocator gatewayRoutes(RouteLocatorBuilder builder) {
return builder.routes()
.route(predicateSpec
-> predicateSpec.path("/first/**")
.filters(gatewayFilterSpec ->
// 필터에 대한 정보
gatewayFilterSpec.addRequestHeader("first","firstrequest")
.addResponseHeader("first", "firstrequest"))
.uri("<http://127.0.0.1:9100/>")).build();
}
}