Architecture/MSA

Spring Cloud Gateway - Route Metadata Configuration

체리필터 2021. 1. 7. 10:33
728x90
반응형

route 룰에 meta data를 넣을 수 있다. yml 파일의 경우 아래와 같은 방법으로 하면 된다.

spring:
  cloud:
    gateway:
      routes:
      - id: route_with_metadata
        uri: https://example.org
        metadata:
          optionName: "OptionValue"
          compositeObject:
            name: "value"
          iAmNumber: 1

Java 로 할 경우에는 다음과 같이 한다.

import static org.springframework.cloud.gateway.support.RouteMetadataUtils.CONNECT_TIMEOUT_ATTR;
import static org.springframework.cloud.gateway.support.RouteMetadataUtils.RESPONSE_TIMEOUT_ATTR;

      @Bean
      public RouteLocator customRouteLocator(RouteLocatorBuilder routeBuilder){
         return routeBuilder.routes()
               .route("test1", r -> {
                  return r.host("*.somehost.org").and().path("/somepath")
                        .filters(f -> f.addRequestHeader("header1", "header-value-1"))
                        .uri("http://someuri")
                        .metadata(RESPONSE_TIMEOUT_ATTR, 200)
                        .metadata(CONNECT_TIMEOUT_ATTR, 200);
               })
               .build();
      }

셋팅 된 meta data를 가지고 올 경우에는 다음 처럼 사용할 수 있다.

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
//        ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR;
        log.info("##################### custom global filter #####################");

        Route route = exchange.getAttribute(GATEWAY_ROUTE_ATTR);
        route.getMetadata();
//        route.getMetadata("someKey");

        return chain.filter(exchange);
    }

매뉴얼 상 route.getMetadata(somkey)로 특정 meta data를 가져올 수 있다고 하는데 실제 문법 오류가 나고 있으며 org.springframework.cloud.gateway.route.Route.java 파일을 열어봐도 private final Map<String, Object> metadata; 의 맵 정보 중 특정 키로 값을 가져오는 방법은 안보인다.

728x90
반응형