From 069f24d568678d3698bd9ac3a8ea7d8a1c0f1943 Mon Sep 17 00:00:00 2001 From: Ziemowit Date: Fri, 29 Nov 2019 11:33:46 +0100 Subject: [PATCH] Allow to configure maxIdleTime property for HttpClient (#1411) * Allow to configure maxIdleTime property for HttpClient Since 0.9.0.RELEASE of reactor netty there is a possibility to configure the pooled connection max idle time. This commit gives the possibility to set it via spring configuration. * Changes after review --- docs/src/main/asciidoc/_configprops.adoc | 1 + .../gateway/config/GatewayAutoConfiguration.java | 7 +++++-- .../cloud/gateway/config/HttpClientProperties.java | 14 ++++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/docs/src/main/asciidoc/_configprops.adoc b/docs/src/main/asciidoc/_configprops.adoc index edc88385..5f7642c6 100644 --- a/docs/src/main/asciidoc/_configprops.adoc +++ b/docs/src/main/asciidoc/_configprops.adoc @@ -28,6 +28,7 @@ |spring.cloud.gateway.httpclient.connect-timeout | | The connect timeout in millis, the default is 45s. |spring.cloud.gateway.httpclient.pool.acquire-timeout | | Only for type FIXED, the maximum time in millis to wait for aquiring. |spring.cloud.gateway.httpclient.pool.max-connections | | Only for type FIXED, the maximum number of connections before starting pending acquisition on existing ones. +|spring.cloud.gateway.httpclient.pool.max-idle-time | | Time in millis after which the channel will be closed. If NULL, there is no max idle time. |spring.cloud.gateway.httpclient.pool.name | proxy | The channel pool map name, defaults to proxy. |spring.cloud.gateway.httpclient.pool.type | | Type of pool for HttpClient to use, defaults to ELASTIC. |spring.cloud.gateway.httpclient.proxy.host | | Hostname for proxy configuration of Netty HttpClient. diff --git a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java index b5dfcec0..e087c063 100644 --- a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java +++ b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java @@ -152,6 +152,7 @@ import static org.springframework.cloud.gateway.config.HttpClientProperties.Pool /** * @author Spencer Gibb + * @author Ziemowit Stolarczyk */ @Configuration(proxyBeanMethods = false) @ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMissing = true) @@ -586,10 +587,12 @@ public class GatewayAutoConfiguration { } else if (pool.getType() == FIXED) { connectionProvider = ConnectionProvider.fixed(pool.getName(), - pool.getMaxConnections(), pool.getAcquireTimeout()); + pool.getMaxConnections(), pool.getAcquireTimeout(), + pool.getMaxIdleTime()); } else { - connectionProvider = ConnectionProvider.elastic(pool.getName()); + connectionProvider = ConnectionProvider.elastic(pool.getName(), + pool.getMaxIdleTime()); } HttpClient httpClient = HttpClient.create(connectionProvider) diff --git a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/HttpClientProperties.java b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/HttpClientProperties.java index 55c71f29..c34df7be 100644 --- a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/HttpClientProperties.java +++ b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/HttpClientProperties.java @@ -157,6 +157,12 @@ public class HttpClientProperties { /** Only for type FIXED, the maximum time in millis to wait for aquiring. */ private Long acquireTimeout = ConnectionProvider.DEFAULT_POOL_ACQUIRE_TIMEOUT; + /** + * Time in millis after which the channel will be closed. + * If NULL, there is no max idle time. + */ + private Duration maxIdleTime = null; + public PoolType getType() { return type; } @@ -189,6 +195,14 @@ public class HttpClientProperties { this.acquireTimeout = acquireTimeout; } + public Duration getMaxIdleTime() { + return maxIdleTime; + } + + public void setMaxIdleTime(Duration maxIdleTime) { + this.maxIdleTime = maxIdleTime; + } + @Override public String toString() { return "Pool{" + "type=" + type + ", name='" + name + '\''