코딩딩/MSA

Gateway

전낙타 2023. 11. 3. 18:18

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();
    }
}