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:
parent
24b82746b5
commit
aafdcecf53
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -63,6 +63,7 @@ public class HttpComponentsClientHttpRequestFactoryTests extends AbstractHttpReq
|
|||
HttpClient httpClient = HttpClientBuilder.create().build();
|
||||
HttpComponentsClientHttpRequestFactory hrf = new HttpComponentsClientHttpRequestFactory(httpClient);
|
||||
hrf.setConnectTimeout(1234);
|
||||
hrf.setConnectionRequestTimeout(4321);
|
||||
hrf.setReadTimeout(4567);
|
||||
|
||||
URI uri = new URI(baseUrl + "/status/ok");
|
||||
|
|
@ -75,6 +76,7 @@ public class HttpComponentsClientHttpRequestFactoryTests extends AbstractHttpReq
|
|||
RequestConfig.class.isInstance(config));
|
||||
RequestConfig requestConfig = (RequestConfig) config;
|
||||
assertEquals("Wrong custom connection timeout", 1234, requestConfig.getConnectTimeout());
|
||||
assertEquals("Wrong custom connection request timeout", 4321, requestConfig.getConnectionRequestTimeout());
|
||||
assertEquals("Wrong custom socket timeout", 4567, requestConfig.getSocketTimeout());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -43,6 +43,16 @@ public class HttpComponentsHttpInvokerRequestExecutorTests {
|
|||
assertEquals(5000, httpPost.getConfig().getConnectTimeout());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void customizeConnectionRequestTimeout() throws IOException {
|
||||
HttpComponentsHttpInvokerRequestExecutor executor = new HttpComponentsHttpInvokerRequestExecutor();
|
||||
executor.setConnectionRequestTimeout(7000);
|
||||
|
||||
HttpInvokerClientConfiguration config = mockHttpInvokerClientConfiguration("http://fake-service");
|
||||
HttpPost httpPost = executor.createHttpPost(config);
|
||||
assertEquals(7000, httpPost.getConfig().getConnectionRequestTimeout());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void customizeReadTimeout() throws IOException {
|
||||
HttpComponentsHttpInvokerRequestExecutor executor = new HttpComponentsHttpInvokerRequestExecutor();
|
||||
|
|
|
|||
Loading…
Reference in New Issue