Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
* Default configuration for {@link CloseableHttpClient}.
*
* @author Nguyen Ky Thanh
* @author changjin wei(魏昌进)
*/
@Configuration(proxyBeanMethods = false)
@ConditionalOnMissingBean(CloseableHttpClient.class)
Expand Down Expand Up @@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
* @author Ryan Baxter
* @author Nguyen Ky Thanh
* @author Olga Maciaszek-Sharma
* @author changjin wei(魏昌进)
*/
@ConfigurationProperties(prefix = "feign.httpclient")
public class FeignHttpClientProperties {
Expand Down Expand Up @@ -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 = 3;

/**
* Default value for connection request timeout unit.
*/
public static final TimeUnit DEFAULT_CONNECTION_REQUEST_TIMEOUT_UNIT = TimeUnit.MINUTES;

/**
* Pool concurrency policies.
*/
Expand All @@ -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;
}
Expand Down Expand Up @@ -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.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -67,17 +70,23 @@ 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("feign.httpclient.maxConnections=2", "feign.httpclient.connectionTimeout=2",
.of("feign.httpclient.maxConnections=2", "feign.httpclient.connectionTimeout=2",
"feign.httpclient.maxConnectionsPerRoute=2", "feign.httpclient.timeToLive=2",
"feign.httpclient.disableSslValidation=true", "feign.httpclient.followRedirects=false",
"feign.httpclient.disableSslValidation=true", "feign.httpclient.followRedirects=false",
"feign.httpclient.hc5.poolConcurrencyPolicy=lax", "feign.httpclient.hc5.poolReusePolicy=lifo",
"feign.httpclient.hc5.socketTimeout=200", "feign.httpclient.hc5.socketTimeoutUnit=milliseconds")
"feign.httpclient.hc5.socketTimeout=200", "feign.httpclient.hc5.socketTimeoutUnit=milliseconds",
"feign.httpclient.hc5.connectionRequestTimeout=200",
"feign.httpclient.hc5.connectionRequestTimeoutUnit=milliseconds")
.applyTo(this.context);
setupContext();
assertThat(getProperties().getMaxConnections()).isEqualTo(2);
Expand All @@ -90,6 +99,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() {
Expand Down