12. Http 超时配置

Http 超时(响应和连接)可以为所有路由配置,也可以为每个特定路由覆盖。spring-doc.cn

12.1. 全局超时

要配置全局 http 超时:
必须以毫秒为单位指定。
必须指定为 java.time.Duration
connect-timeoutresponse-timeoutspring-doc.cn

全局 HTTP 超时示例
spring:
  cloud:
    gateway:
      httpclient:
        connect-timeout: 1000
        response-timeout: 5s

12.2. 每条路由超时

要配置每路由超时:
必须以毫秒为单位指定。
必须以毫秒为单位指定。
connect-timeoutresponse-timeoutspring-doc.cn

通过配置进行按路由 HTTP 超时配置
      - id: per_route_timeouts
        uri: https://example.org
        predicates:
          - name: Path
            args:
              pattern: /delay/{timeout}
        metadata:
          response-timeout: 200
          connect-timeout: 200
使用 Java DSL 的每路由超时配置
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();
      }

具有负值的 per-route 将禁用 global 值。response-timeoutresponse-timeoutspring-doc.cn

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