概述
HttpClient 有 3 个超时时间设置,通过配置 RequestConfig 即可配置请求的超时时间,各个参数的作用如下:
-
connectTimeout:请求连接超时时间,超时会抛出
org.apache.http.conn.ConnectTimeoutException: Connect to 127.0.0.1:8083 [/127.0.0.1] failed: connect timed out
异常。例如请求本地不存在的一个服务:http://127.0.0.1:8083 -
socketTimeout:接收包的超时时间。服务端与客户端传输数据包之间的时间间隔,超过这个间隔将抛出
java.net.SocketTimeoutException: Read timed out
-
connectionRequestTimeout:在使用线程池场景下,从连接池获取到连接的超时时间,时间超出将抛出
org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool
,线程池默认最大的连接数是 20。
PoolingHttpClientConnectionManager 作为连接池
-
maxTotal:最大连接数
-
defaultMaxPerRoute:每个路由最大连接数
代码样例
- 依赖配置
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.10</version>
</dependency>
- 代码样例
static {
LayeredConnectionSocketFactory sslsf = null;
try {
sslsf = new SSLConnectionSocketFactory(SSLContext.getDefault());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("https", sslsf)