Solución:
HttpClient
tiene una forma de establecer la conexión y el tiempo de espera del socket (setConnectionTimeout()
y setTimeout()
) de acuerdo con los javadocs de HttpClient.
Connection timeout
es el tiempo de espera hasta que se establezca una conexión con el servidor.
Socket timeout
es el tiempo de espera para recibir datos (tiempo de espera de socket).
Ejemplo:
Digamos que apunta su navegador para acceder a una página web. Si el servidor no responde en X segundos, se producirá un tiempo de espera de conexión. Pero si establece la conexión, el servidor comenzará a procesar el resultado para el navegador. Si no finaliza este procesamiento en Y segundos, se producirá un tiempo de espera de socket.
De la documentación:
/**
* Returns the timeout in milliseconds used when requesting a connection
* from the connection manager. A timeout value of zero is interpreted
* as an infinite timeout.
* <p>
* A timeout value of zero is interpreted as an infinite timeout.
* A negative value is interpreted as undefined (system default).
* </p>
* <p>
* Default: {@code -1}
* </p>
*/
public int getConnectionRequestTimeout() {
return connectionRequestTimeout;
}
/**
* Determines the timeout in milliseconds until a connection is established.
* A timeout value of zero is interpreted as an infinite timeout.
* <p>
* A timeout value of zero is interpreted as an infinite timeout.
* A negative value is interpreted as undefined (system default).
* </p>
* <p>
* Default: {@code -1}
* </p>
*/
public int getConnectTimeout() {
return connectTimeout;
}
Así es como debería verse el código:
HttpClientBuilder clientBuilder = HttpClientBuilder.create();
RequestConfig.Builder requestBuilder = RequestConfig.custom();
// Connection Timeout to establish a connection
requestBuilder = requestBuilder.setConnectTimeout(connectTimeoutMillis);
// Timeout to get a connection from the connection manager for the Http Client
requestBuilder = requestBuilder.setConnectionRequestTimeout(requestTimeoutMillis);
// Timeout between two data packets from the server
requestBuilder = requestBuilder.setSocketTimeout(requestTimeoutMillis);
clientBuilder.setDefaultRequestConfig(requestBuilder.build());
CloseableHttpClient httpClient = clientBuilder.build();