Skip to content

Commit 10b55a0

Browse files
authored
connectionRequestTimeout for httpClient Fixes gh-799 (#817)
1 parent ba07f19 commit 10b55a0

File tree

3 files changed

+56
-3
lines changed

3 files changed

+56
-3
lines changed

spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/clientconfig/HttpClient5FeignConfiguration.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
* Default configuration for {@link CloseableHttpClient}.
5656
*
5757
* @author Nguyen Ky Thanh
58+
* @author changjin wei(魏昌进)
5859
*/
5960
@Configuration(proxyBeanMethods = false)
6061
@ConditionalOnMissingBean(CloseableHttpClient.class)
@@ -90,7 +91,11 @@ public CloseableHttpClient httpClient5(HttpClientConnectionManager connectionMan
9091
.setDefaultRequestConfig(RequestConfig.custom()
9192
.setConnectTimeout(
9293
Timeout.of(httpClientProperties.getConnectionTimeout(), TimeUnit.MILLISECONDS))
93-
.setRedirectsEnabled(httpClientProperties.isFollowRedirects()).build())
94+
.setRedirectsEnabled(httpClientProperties.isFollowRedirects())
95+
.setConnectionRequestTimeout(
96+
Timeout.of(httpClientProperties.getHc5().getConnectionRequestTimeout(),
97+
httpClientProperties.getHc5().getConnectionRequestTimeoutUnit()))
98+
.build())
9499
.build();
95100
return httpClient5;
96101
}

spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/FeignHttpClientProperties.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
* @author Ryan Baxter
2828
* @author Nguyen Ky Thanh
2929
* @author Olga Maciaszek-Sharma
30+
* @author changjin wei(魏昌进)
3031
*/
3132
@ConfigurationProperties(prefix = "feign.httpclient")
3233
public class FeignHttpClientProperties {
@@ -199,6 +200,16 @@ public static class Hc5Properties {
199200
*/
200201
public static final TimeUnit DEFAULT_SOCKET_TIMEOUT_UNIT = TimeUnit.SECONDS;
201202

203+
/**
204+
* Default value for connection request timeout.
205+
*/
206+
public static final int DEFAULT_CONNECTION_REQUEST_TIMEOUT = 3;
207+
208+
/**
209+
* Default value for connection request timeout unit.
210+
*/
211+
public static final TimeUnit DEFAULT_CONNECTION_REQUEST_TIMEOUT_UNIT = TimeUnit.MINUTES;
212+
202213
/**
203214
* Pool concurrency policies.
204215
*/
@@ -219,6 +230,16 @@ public static class Hc5Properties {
219230
*/
220231
private TimeUnit socketTimeoutUnit = DEFAULT_SOCKET_TIMEOUT_UNIT;
221232

233+
/**
234+
* Default value for connection request timeout.
235+
*/
236+
private int connectionRequestTimeout = DEFAULT_CONNECTION_REQUEST_TIMEOUT;
237+
238+
/**
239+
* Default value for connection request timeout unit.
240+
*/
241+
private TimeUnit connectionRequestTimeoutUnit = DEFAULT_CONNECTION_REQUEST_TIMEOUT_UNIT;
242+
222243
public PoolConcurrencyPolicy getPoolConcurrencyPolicy() {
223244
return poolConcurrencyPolicy;
224245
}
@@ -251,6 +272,22 @@ public void setSocketTimeout(int socketTimeout) {
251272
this.socketTimeout = socketTimeout;
252273
}
253274

275+
public int getConnectionRequestTimeout() {
276+
return connectionRequestTimeout;
277+
}
278+
279+
public void setConnectionRequestTimeout(int connectionRequestTimeout) {
280+
this.connectionRequestTimeout = connectionRequestTimeout;
281+
}
282+
283+
public TimeUnit getConnectionRequestTimeoutUnit() {
284+
return connectionRequestTimeoutUnit;
285+
}
286+
287+
public void setConnectionRequestTimeoutUnit(TimeUnit connectionRequestTimeoutUnit) {
288+
this.connectionRequestTimeoutUnit = connectionRequestTimeoutUnit;
289+
}
290+
254291
/**
255292
* Enumeration of pool concurrency policies.
256293
*/

spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/FeignHttpClientPropertiesTests.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,15 @@
3232
import org.springframework.test.annotation.DirtiesContext;
3333

3434
import static org.assertj.core.api.Assertions.assertThat;
35+
import static org.springframework.cloud.openfeign.support.FeignHttpClientProperties.Hc5Properties.DEFAULT_CONNECTION_REQUEST_TIMEOUT;
36+
import static org.springframework.cloud.openfeign.support.FeignHttpClientProperties.Hc5Properties.DEFAULT_CONNECTION_REQUEST_TIMEOUT_UNIT;
3537
import static org.springframework.cloud.openfeign.support.FeignHttpClientProperties.Hc5Properties.DEFAULT_SOCKET_TIMEOUT;
3638
import static org.springframework.cloud.openfeign.support.FeignHttpClientProperties.Hc5Properties.DEFAULT_SOCKET_TIMEOUT_UNIT;
3739

3840
/**
3941
* @author Ryan Baxter
4042
* @author Nguyen Ky Thanh
43+
* @author changjin wei(魏昌进)
4144
*/
4245
@DirtiesContext
4346
class FeignHttpClientPropertiesTests {
@@ -67,17 +70,23 @@ void testDefaults() {
6770
assertThat(getProperties().getHc5().getPoolReusePolicy()).isEqualTo(PoolReusePolicy.FIFO);
6871
assertThat(getProperties().getHc5().getSocketTimeout()).isEqualTo(DEFAULT_SOCKET_TIMEOUT);
6972
assertThat(getProperties().getHc5().getSocketTimeoutUnit()).isEqualTo(DEFAULT_SOCKET_TIMEOUT_UNIT);
73+
assertThat(getProperties().getHc5().getConnectionRequestTimeout())
74+
.isEqualTo(DEFAULT_CONNECTION_REQUEST_TIMEOUT);
75+
assertThat(getProperties().getHc5().getConnectionRequestTimeoutUnit())
76+
.isEqualTo(DEFAULT_CONNECTION_REQUEST_TIMEOUT_UNIT);
7077
}
7178

7279
@Test
7380
void testCustomization() {
7481
TestPropertyValues
75-
.of("feign.httpclient.maxConnections=2", "feign.httpclient.connectionTimeout=2",
82+
.of("feign.httpclient.maxConnections=2", "feign.httpclient.connectionTimeout=2",
7683
"feign.httpclient.maxConnectionsPerRoute=2", "feign.httpclient.timeToLive=2",
7784
"feign.httpclient.disableSslValidation=true", "feign.httpclient.followRedirects=false",
7885
"feign.httpclient.disableSslValidation=true", "feign.httpclient.followRedirects=false",
7986
"feign.httpclient.hc5.poolConcurrencyPolicy=lax", "feign.httpclient.hc5.poolReusePolicy=lifo",
80-
"feign.httpclient.hc5.socketTimeout=200", "feign.httpclient.hc5.socketTimeoutUnit=milliseconds")
87+
"feign.httpclient.hc5.socketTimeout=200", "feign.httpclient.hc5.socketTimeoutUnit=milliseconds",
88+
"feign.httpclient.hc5.connectionRequestTimeout=200",
89+
"feign.httpclient.hc5.connectionRequestTimeoutUnit=milliseconds")
8190
.applyTo(this.context);
8291
setupContext();
8392
assertThat(getProperties().getMaxConnections()).isEqualTo(2);
@@ -90,6 +99,8 @@ void testCustomization() {
9099
assertThat(getProperties().getHc5().getPoolReusePolicy()).isEqualTo(PoolReusePolicy.LIFO);
91100
assertThat(getProperties().getHc5().getSocketTimeout()).isEqualTo(200);
92101
assertThat(getProperties().getHc5().getSocketTimeoutUnit()).isEqualTo(TimeUnit.MILLISECONDS);
102+
assertThat(getProperties().getHc5().getConnectionRequestTimeout()).isEqualTo(200);
103+
assertThat(getProperties().getHc5().getConnectionRequestTimeoutUnit()).isEqualTo(TimeUnit.MILLISECONDS);
93104
}
94105

95106
private void setupContext() {

0 commit comments

Comments
 (0)