From a3db626184327d80917f772db507f0a472d64b58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=AD=8F=2C=E5=B0=8F=E9=AD=8F=2C=E6=88=91?= =?UTF-8?q?=E4=BB=AC=E8=A6=81=E5=8E=BB=E5=93=AA=E9=87=8C=E5=91=80?= Date: Tue, 20 Dec 2022 22:55:17 +0800 Subject: [PATCH 1/3] connectionRequestTimeout for httpClient Fixes gh-799 --- .../HttpClient5FeignConfiguration.java | 7 +++- .../support/FeignHttpClientProperties.java | 37 +++++++++++++++++++ .../FeignHttpClientPropertiesTests.java | 37 +++++++++++++------ 3 files changed, 68 insertions(+), 13 deletions(-) diff --git a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/clientconfig/HttpClient5FeignConfiguration.java b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/clientconfig/HttpClient5FeignConfiguration.java index 5477ac605..36ff6b1d1 100644 --- a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/clientconfig/HttpClient5FeignConfiguration.java +++ b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/clientconfig/HttpClient5FeignConfiguration.java @@ -55,6 +55,7 @@ * Default configuration for {@link CloseableHttpClient}. * * @author Nguyen Ky Thanh + * @author changjin wei(魏昌进) */ @Configuration(proxyBeanMethods = false) @ConditionalOnMissingBean(CloseableHttpClient.class) @@ -90,7 +91,11 @@ public CloseableHttpClient httpClient5(HttpClientConnectionManager connectionMan .setDefaultRequestConfig(RequestConfig.custom() .setConnectTimeout( Timeout.of(httpClientProperties.getConnectionTimeout(), TimeUnit.MILLISECONDS)) - .setRedirectsEnabled(httpClientProperties.isFollowRedirects()).build()) + .setRedirectsEnabled(httpClientProperties.isFollowRedirects()) + .setConnectionRequestTimeout( + Timeout.of(httpClientProperties.getHc5().getConnectionRequestTimeout(), + httpClientProperties.getHc5().getConnectionRequestTimeoutUnit())) + .build()) .build(); return httpClient5; } diff --git a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/FeignHttpClientProperties.java b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/FeignHttpClientProperties.java index 98e273eba..6f0313c11 100644 --- a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/FeignHttpClientProperties.java +++ b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/FeignHttpClientProperties.java @@ -27,6 +27,7 @@ * @author Ryan Baxter * @author Nguyen Ky Thanh * @author Olga Maciaszek-Sharma + * @author changjin wei(魏昌进) */ @ConfigurationProperties(prefix = "spring.cloud.openfeign.httpclient") public class FeignHttpClientProperties { @@ -199,6 +200,16 @@ public static class Hc5Properties { */ public static final TimeUnit DEFAULT_SOCKET_TIMEOUT_UNIT = TimeUnit.SECONDS; + /** + * Default value for connection request timeout. + */ + public static final int DEFAULT_CONNECTION_REQUEST_TIMEOUT = 5; + + /** + * Default value for connection request timeout unit. + */ + public static final TimeUnit DEFAULT_CONNECTION_REQUEST_TIMEOUT_UNIT = TimeUnit.SECONDS; + /** * Pool concurrency policies. */ @@ -219,6 +230,16 @@ public static class Hc5Properties { */ private TimeUnit socketTimeoutUnit = DEFAULT_SOCKET_TIMEOUT_UNIT; + /** + * Default value for connection request timeout. + */ + private int connectionRequestTimeout = DEFAULT_CONNECTION_REQUEST_TIMEOUT; + + /** + * Default value for connection request timeout unit. + */ + private TimeUnit connectionRequestTimeoutUnit = DEFAULT_CONNECTION_REQUEST_TIMEOUT_UNIT; + public PoolConcurrencyPolicy getPoolConcurrencyPolicy() { return poolConcurrencyPolicy; } @@ -251,6 +272,22 @@ public void setSocketTimeout(int socketTimeout) { this.socketTimeout = socketTimeout; } + public int getConnectionRequestTimeout() { + return connectionRequestTimeout; + } + + public void setConnectionRequestTimeout(int connectionRequestTimeout) { + this.connectionRequestTimeout = connectionRequestTimeout; + } + + public TimeUnit getConnectionRequestTimeoutUnit() { + return connectionRequestTimeoutUnit; + } + + public void setConnectionRequestTimeoutUnit(TimeUnit connectionRequestTimeoutUnit) { + this.connectionRequestTimeoutUnit = connectionRequestTimeoutUnit; + } + /** * Enumeration of pool concurrency policies. */ diff --git a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/FeignHttpClientPropertiesTests.java b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/FeignHttpClientPropertiesTests.java index 5006a4552..f906fe2c4 100644 --- a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/FeignHttpClientPropertiesTests.java +++ b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/FeignHttpClientPropertiesTests.java @@ -32,12 +32,15 @@ import org.springframework.test.annotation.DirtiesContext; import static org.assertj.core.api.Assertions.assertThat; +import static org.springframework.cloud.openfeign.support.FeignHttpClientProperties.Hc5Properties.DEFAULT_CONNECTION_REQUEST_TIMEOUT; +import static org.springframework.cloud.openfeign.support.FeignHttpClientProperties.Hc5Properties.DEFAULT_CONNECTION_REQUEST_TIMEOUT_UNIT; import static org.springframework.cloud.openfeign.support.FeignHttpClientProperties.Hc5Properties.DEFAULT_SOCKET_TIMEOUT; import static org.springframework.cloud.openfeign.support.FeignHttpClientProperties.Hc5Properties.DEFAULT_SOCKET_TIMEOUT_UNIT; /** * @author Ryan Baxter * @author Nguyen Ky Thanh + * @author changjin wei(魏昌进) */ @DirtiesContext class FeignHttpClientPropertiesTests { @@ -67,22 +70,30 @@ void testDefaults() { assertThat(getProperties().getHc5().getPoolReusePolicy()).isEqualTo(PoolReusePolicy.FIFO); assertThat(getProperties().getHc5().getSocketTimeout()).isEqualTo(DEFAULT_SOCKET_TIMEOUT); assertThat(getProperties().getHc5().getSocketTimeoutUnit()).isEqualTo(DEFAULT_SOCKET_TIMEOUT_UNIT); + assertThat(getProperties().getHc5().getConnectionRequestTimeout()) + .isEqualTo(DEFAULT_CONNECTION_REQUEST_TIMEOUT); + assertThat(getProperties().getHc5().getConnectionRequestTimeoutUnit()) + .isEqualTo(DEFAULT_CONNECTION_REQUEST_TIMEOUT_UNIT); } @Test void testCustomization() { - TestPropertyValues.of("spring.cloud.openfeign.httpclient.maxConnections=2", - "spring.cloud.openfeign.httpclient.connectionTimeout=2", - "spring.cloud.openfeign.httpclient.maxConnectionsPerRoute=2", - "spring.cloud.openfeign.httpclient.timeToLive=2", - "spring.cloud.openfeign.httpclient.disableSslValidation=true", - "spring.cloud.openfeign.httpclient.followRedirects=false", - "spring.cloud.openfeign.httpclient.disableSslValidation=true", - "spring.cloud.openfeign.httpclient.followRedirects=false", - "spring.cloud.openfeign.httpclient.hc5.poolConcurrencyPolicy=lax", - "spring.cloud.openfeign.httpclient.hc5.poolReusePolicy=lifo", - "spring.cloud.openfeign.httpclient.hc5.socketTimeout=200", - "spring.cloud.openfeign.httpclient.hc5.socketTimeoutUnit=milliseconds").applyTo(this.context); + TestPropertyValues + .of("spring.cloud.openfeign.httpclient.maxConnections=2", + "spring.cloud.openfeign.httpclient.connectionTimeout=2", + "spring.cloud.openfeign.httpclient.maxConnectionsPerRoute=2", + "spring.cloud.openfeign.httpclient.timeToLive=2", + "spring.cloud.openfeign.httpclient.disableSslValidation=true", + "spring.cloud.openfeign.httpclient.followRedirects=false", + "spring.cloud.openfeign.httpclient.disableSslValidation=true", + "spring.cloud.openfeign.httpclient.followRedirects=false", + "spring.cloud.openfeign.httpclient.hc5.poolConcurrencyPolicy=lax", + "spring.cloud.openfeign.httpclient.hc5.poolReusePolicy=lifo", + "spring.cloud.openfeign.httpclient.hc5.socketTimeout=200", + "spring.cloud.openfeign.httpclient.hc5.socketTimeoutUnit=milliseconds", + "spring.cloud.openfeign.httpclient.hc5.connectionRequestTimeout=200", + "spring.cloud.openfeign.httpclient.hc5.connectionRequestTimeoutUnit=milliseconds") + .applyTo(this.context); setupContext(); assertThat(getProperties().getMaxConnections()).isEqualTo(2); assertThat(getProperties().getConnectionTimeout()).isEqualTo(2); @@ -94,6 +105,8 @@ void testCustomization() { assertThat(getProperties().getHc5().getPoolReusePolicy()).isEqualTo(PoolReusePolicy.LIFO); assertThat(getProperties().getHc5().getSocketTimeout()).isEqualTo(200); assertThat(getProperties().getHc5().getSocketTimeoutUnit()).isEqualTo(TimeUnit.MILLISECONDS); + assertThat(getProperties().getHc5().getConnectionRequestTimeout()).isEqualTo(200); + assertThat(getProperties().getHc5().getConnectionRequestTimeoutUnit()).isEqualTo(TimeUnit.MILLISECONDS); } private void setupContext() { From 5c3bf47be53c7b03f962fc830e4f72b4e2c71f59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=AD=8F=2C=E5=B0=8F=E9=AD=8F=2C=E6=88=91?= =?UTF-8?q?=E4=BB=AC=E8=A6=81=E5=8E=BB=E5=93=AA=E9=87=8C=E5=91=80?= Date: Tue, 20 Dec 2022 22:55:17 +0800 Subject: [PATCH 2/3] HC5 default connection request timeout (3 minutes). --- .../cloud/openfeign/support/FeignHttpClientProperties.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/FeignHttpClientProperties.java b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/FeignHttpClientProperties.java index 6f0313c11..1079a9608 100644 --- a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/FeignHttpClientProperties.java +++ b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/FeignHttpClientProperties.java @@ -203,7 +203,7 @@ public static class Hc5Properties { /** * Default value for connection request timeout. */ - public static final int DEFAULT_CONNECTION_REQUEST_TIMEOUT = 5; + public static final int DEFAULT_CONNECTION_REQUEST_TIMEOUT = 3; /** * Default value for connection request timeout unit. From bd232c783c56317b1ae6be2776ef7948f5c91841 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=AD=8F=2C=E5=B0=8F=E9=AD=8F=2C=E6=88=91?= =?UTF-8?q?=E4=BB=AC=E8=A6=81=E5=8E=BB=E5=93=AA=E9=87=8C=E5=91=80?= Date: Mon, 16 Jan 2023 23:14:15 +0800 Subject: [PATCH 3/3] HC5 default connection request timeout (3 minutes). --- .../cloud/openfeign/support/FeignHttpClientProperties.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/FeignHttpClientProperties.java b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/FeignHttpClientProperties.java index 1079a9608..88ac5682d 100644 --- a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/FeignHttpClientProperties.java +++ b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/FeignHttpClientProperties.java @@ -208,7 +208,7 @@ public static class Hc5Properties { /** * Default value for connection request timeout unit. */ - public static final TimeUnit DEFAULT_CONNECTION_REQUEST_TIMEOUT_UNIT = TimeUnit.SECONDS; + public static final TimeUnit DEFAULT_CONNECTION_REQUEST_TIMEOUT_UNIT = TimeUnit.MINUTES; /** * Pool concurrency policies.