Customize connection request timeout

Prior to this commit it was not possible to easily customize the
connection request timeout used by the HttpClient. Both
`HttpComponentsClientHttpRequestFactory` and
`HttpComponentsClientHttpRequestFactoryTests` have been updated to
support a `connectionRequestTimeout` property.

Issue: SPR-12166
This commit is contained in:
Stephane Nicoll
2014-12-22 16:31:07 +01:00
parent 24b82746b5
commit aafdcecf53
4 changed files with 39 additions and 2 deletions

View File

@@ -61,6 +61,8 @@ public class HttpComponentsClientHttpRequestFactory implements ClientHttpRequest
private int connectTimeout;
private int connectionRequestTimeout;
private int socketTimeout;
private boolean bufferRequestBody = true;
@@ -139,6 +141,16 @@ public class HttpComponentsClientHttpRequestFactory implements ClientHttpRequest
}
}
/**
* Set the timeout in milliseconds used when requesting a connection from the connection
* manager using the underlying HttpClient.
* A timeout value of 0 specifies an infinite timeout.
* @param connectionRequestTimeout the timeout value to request a connection in milliseconds
*/
public void setConnectionRequestTimeout(int connectionRequestTimeout) {
this.connectionRequestTimeout = connectionRequestTimeout;
}
/**
* Set the socket read timeout for the underlying HttpClient.
* A timeout value of 0 specifies an infinite timeout.
@@ -193,9 +205,10 @@ public class HttpComponentsClientHttpRequestFactory implements ClientHttpRequest
config = ((Configurable) httpRequest).getConfig();
}
if (config == null) {
if (this.socketTimeout > 0 || this.connectTimeout > 0) {
if (this.connectTimeout > 0 || this.connectionRequestTimeout > 0 || this.socketTimeout > 0) {
config = RequestConfig.custom()
.setConnectTimeout(this.connectTimeout)
.setConnectionRequestTimeout(this.connectionRequestTimeout)
.setSocketTimeout(this.socketTimeout)
.build();
}

View File

@@ -70,6 +70,7 @@ public class HttpComponentsHttpInvokerRequestExecutor extends AbstractHttpInvoke
private HttpClient httpClient;
private int connectionTimeout = 0;
private int connectionRequestTimeout = 0;
private int readTimeout = DEFAULT_READ_TIMEOUT_MILLISECONDS;
@@ -148,6 +149,16 @@ public class HttpComponentsHttpInvokerRequestExecutor extends AbstractHttpInvoke
}
}
/**
* Set the timeout in milliseconds used when requesting a connection from the connection
* manager using the underlying HttpClient.
* A timeout value of 0 specifies an infinite timeout.
* @param connectionRequestTimeout the timeout value to request a connection in milliseconds
*/
public void setConnectionRequestTimeout(int connectionRequestTimeout) {
this.connectionRequestTimeout = connectionRequestTimeout;
}
/**
* Set the socket read timeout for the underlying HttpClient.
* A timeout value of 0 specifies an infinite timeout.
@@ -240,9 +251,10 @@ public class HttpComponentsHttpInvokerRequestExecutor extends AbstractHttpInvoke
* @return the RequestConfig to use
*/
protected RequestConfig createRequestConfig(HttpInvokerClientConfiguration config) {
if (this.connectionTimeout > 0 || this.readTimeout > 0) {
if (this.connectionTimeout > 0 || this.connectionRequestTimeout > 0 || this.readTimeout > 0) {
return RequestConfig.custom()
.setConnectTimeout(this.connectionTimeout)
.setConnectionRequestTimeout(this.connectionRequestTimeout)
.setSocketTimeout(this.readTimeout)
.build();
}