ranong项目总结-HttpClient-Timeout设置(一)

来源:互联网 发布:js在框架在打开 编辑:程序博客网 时间:2024/06/05 15:42

httpclient在做数据获取、发送请求必须设置超时机制,如果没有设置超时时间,如果后端服务发生了阻塞、延迟那么这个连接就会回收不及时,httpclient默认的超时时间为24小时。

这里主要介绍了httpclient是4.5.2的版本设置方式,低于这个版本的配置方式就大不一样了。

httpclient提供了3中设置超时方式,分别是
- 从连接池获取连接超时(setConnectionRequestTimeout)。
- 从client到server发送请求超时(setConnectTimeout)。
- 从server获取数据超时(setSocketTimeout

下面代码介绍了这三种超时的配置以及超时报错内容:

public class HttpClientPool {    public static CloseableHttpClient getHttpClient() {        PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();        /*         * 设置最大httpclient pool最大连接数         */        cm.setMaxTotal(2);        CloseableHttpClient httpClient = HttpClients                .custom()                .setDefaultRequestConfig(getDefaultRequestConfig())                .setConnectionManager(cm)                .build();        return httpClient;    }    private static RequestConfig getDefaultRequestConfig(){        RequestConfig requestConfig = RequestConfig                .custom()                /*                 * 从连接池中获取连接的超时时间,假设:连接池中已经使用的连接数等于setMaxTotal,新来的线程在等待1*1000                 * 后超时,错误内容:org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool                 */                .setConnectionRequestTimeout(1*1000)                /*                 * 这定义了通过网络与服务器建立连接的超时时间。                 * Httpclient包中通过一个异步线程去创建与服务器的socket连接,这就是该socket连接的超时时间,                 * 此处设置为2秒。假设:访问一个IP,192.168.10.100,这个IP不存在或者响应太慢,那么将会返回                 * java.net.SocketTimeoutException: connect timed out                 */                .setConnectTimeout(5*1000)                /*                 * 指的是连接上一个url,获取response的返回等待时间,假设:url程序中存在阻塞、或者response                 * 返回的文件内容太大,在指定的时间内没有读完,则出现                 * java.net.SocketTimeoutException: Read timed out                 */                .setSocketTimeout(30*1000)                .build();        return requestConfig;    }}

==手机QQ扫描下方二维码,快速加入Java架构师交流群==

image

0 0
原创粉丝点击