Architecture/MSA

Spring Cloud Gateway - Http timeouts configuration

체리필터 2021. 1. 7. 11:41
반응형

http 관련 타임아웃 설정을 할 수 있다.

Global timeouts

전역 설정 식으로 모든 것에 적용 되는 설정을 할 수 있다.

spring:
  cloud:
    gateway:
      httpclient:
        connect-timeout: 1000
        response-timeout: 5s

Per-route timeouts

각 route 룰 마다 타임아웃을 별도로 줄 수 있다.

아래는 yml 서정 방식

      - id: per_route_timeouts
        uri: https://example.org
        predicates:
          - name: Path
            args:
              pattern: /delay/{timeout}
        metadata:
          response-timeout: 200
          connect-timeout: 200

아래는 Java 설정 방식

RESPONSE_TIMEOUT_ATTR 과 CONNECT_TIMEOUT_ATTR 은 org.springframework.cloud.gateway.support.RouteMetadataUtils.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();
      }

Fluent Java Routes API

fluent란 단어를 찾아보면 '유창한' 이란 의미가 있어서 정확한 의미를 모르겠지만 아래의 페이지를 참고하면 메소드 체이닝 방식을 의미하는 것으로 보인다. ( ko.wikipedia.org/wiki/%ED%94%8C%EB%A3%A8%EC%96%B8%ED%8A%B8_%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4 )

소프트웨어 공학에서 플루언트 인터페이스(fluent interface)는 메소드 체이닝에 상당 부분 기반한 객체 지향 API 설계 메소드이며, 소스 코드의 가독성을 산문과 유사하게 만드는 것이 목적이다. 특히 인터페이스 안에 도메인 특화 언어를 작성한다. 에릭 에반스와 마틴 폴러가 처음 만든 용어이다. JMock 테스팅 프레임워크에서 유연한 테스트 예측의 예는 다음과 같다:[1]

이미 2020/12/28 - [Architecture/MSA] - Spring Cloud Gateway - Route Predicate & Gateway Filter Factory

 

Spring Cloud Gateway - Route Predicate & Gateway Filter Factory

Gateway를 만들면서 사용할 수 있는 룰들을 셋팅하는데 있어서 구글링 및 공식 Document를 보는 것에 시간이 걸려 하나씩 정리해 둔다. 참고로 사용하게 되는 Predicate Factory는 org.springframework.cloud.gate..

ovclas.tistory.com

에서 많이 다루었던 것 처럼 메소드 체이닝 방식으로 기 정의된 내용 또는 Custom Predicate를 and, or, negate를 통해 이어서 사용할 수 있다.

아래는 하나의 예이다. ( ex : .predicate().and().predicate().or().predicate().negate().predicate() )

        // ip 목록에 있는 것만 허용인데 잘 안됨.
        RemoteAddressResolver resolver = XForwardedRemoteAddressResolver.maxTrustedIndex(1);
        RouteLocator remoteAddrRouteLocator = builder.routes()
                .route("direct-route", p -> p
                    .remoteAddr("192.168.1.1/24", "106.243.25.107", "localhost", "127.0.0.1", "192.168.1.136")
                    .uri("https://www.naver.com")
                )
                .route("proxied-route", p -> p
                    .remoteAddr(resolver, "192.168.1.1/24", "106.243.25.107", "localhost", "127.0.0.1", "192.168.1.136")
                    .uri("https://www.daum.net")
                    .metadata(RESPONSE_TIMEOUT_ATTR, 200)
                    .metadata(CONNECT_TIMEOUT_ATTR, 200)
                    .predicate().and().predicate().or().predicate().negate().predicate()
                )
                .build();

 

 

 

반응형