From 7d9c634364096624f3813515a91c0a5869a0fe0e Mon Sep 17 00:00:00 2001 From: jeremy-l-ford Date: Fri, 8 Mar 2024 14:32:27 -0500 Subject: [PATCH] Add a new method that returns a Mono. (#2993) Delegate implementation to existing getHttpClient method. Fixes gh-2991 --- .../cloud/gateway/filter/NettyRoutingFilter.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/NettyRoutingFilter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/NettyRoutingFilter.java index d9acd324..d41c1706 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/NettyRoutingFilter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/NettyRoutingFilter.java @@ -130,7 +130,7 @@ public class NettyRoutingFilter implements GlobalFilter, Ordered { boolean preserveHost = exchange.getAttributeOrDefault(PRESERVE_HOST_HEADER_ATTRIBUTE, false); Route route = exchange.getAttribute(GATEWAY_ROUTE_ATTR); - Flux responseFlux = getHttpClient(route, exchange).headers(headers -> { + Flux responseFlux = httpClient(route, exchange).flatMapMany(hc -> hc.headers(headers -> { headers.add(httpHeaders); // Will either be set below, or later by Netty headers.remove(HttpHeaders.HOST); @@ -184,7 +184,7 @@ public class NettyRoutingFilter implements GlobalFilter, Ordered { response.getHeaders().addAll(filteredResponseHeaders); return Mono.just(res); - }); + })); Duration responseTimeout = getResponseTimeout(route); if (responseTimeout != null) { @@ -231,6 +231,18 @@ public class NettyRoutingFilter implements GlobalFilter, Ordered { } } + /** + * Creates a new HttpClient with per route timeout configuration. Sub-classes that + * override, should call super.httpClient() if they want to honor the per route + * timeout configuration. + * @param route the current route. + * @param exchange the current ServerWebExchange. + * @return the configured HttpClient. + */ + protected Mono httpClient(Route route, ServerWebExchange exchange) { + return Mono.just(getHttpClient(route, exchange)); + } + /** * Creates a new HttpClient with per route timeout configuration. Sub-classes that * override, should call super.getHttpClient() if they want to honor the per route