一.实现功能
解释三者的connectionRequestTimeout 、connectionTimeout、socketTimeout代表意义,进而了解三者的区别.
二.具体区别
1.connectionRequestTimout(单位是ms):指从连接池获取连接的timeout超出预设时间(
从连接池获取连接的超时时间,如果连接池里连接都被用了,且超过设定时间,就会报错connectionrequesttimeout,会抛出超时异常.
2.connetionTimeout(单位是ms):指客户端和服务器建立连接的timeout.
就是http请求的三个阶段,一:建立连接;二:数据传送;三,断开连接。如果与服务器(这里指数据库)请求建立连接的时间超过ConnectionTimeOut,就会抛 ConnectionTimeOutException,即服务器连接超时,没有在规定的时间内建立连接。
3.socketTimeout(单位是ms):指客户端从服务器读取数据的timeout超出预期设定时间,超出后会抛出SocketTimeOutException.
4.源码实例
public class RequestConfig implements Cloneable {
/**
* 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;
}
/**
* Defines the socket timeout ({@code SO_TIMEOUT}) in milliseconds,
* which is the timeout for waiting for data or, put differently,
* a maximum period inactivity between two consecutive data packets).
* <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 getSocketTimeout() {
return socketTimeout;
}
}
三.代码实例
RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(5000).setConnectTimeout(5000).setSocketTimeout(30000)
.build();
具体写法:
private static final PoolingHttpClientConnectionManager POOL_CONN_MANAGER =
new PoolingHttpClientConnectionManager();
private static final RequestConfig REQ_CFG;
POOL_CONN_MANAGER.setMaxTotal(500);
POOL_CONN_MANAGER.setDefaultMaxPerRoute(POOL_CONN_MANAGER.getMaxTotal());
REQ_CFG =
RequestConfig.custom()
// 请求连接超时时间
.setConnectTimeout(100 * 1000)
// 获取数据超时时间
.setSocketTimeout(360 * 1000)
// 从链接池获取连接超时时间
.setConnectionRequestTimeout(5000)
.build();
CloseableHttpClient client=HttpClients.custom()
.setConnectionManager(POOL_CONN_MANAGER)
.setDefaultRequestConfig(REQ_CFG)
.build();
四.参考:
1.https://zhidao.baidu.com/question/371321784407210444.html