温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

HttpComponents中如何使用HttpClient连接池

发布时间:2021-07-30 16:13:11 来源:亿速云 阅读:190 作者:Leah 栏目:大数据

今天就跟大家聊聊有关HttpComponents中如何使用HttpClient连接池,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。


对于 httpclient 连接池使用一般考虑以下几点:

  • 向连接池申请连接的超时时间

  • 连接建立的超时时间,即 socket 进行 3 次握手建立连接的超时时间

  • 连接超时时间,即 socket 读写超时时间

  • 设置最大 redirect 次数

  • 是否开启可用性检查

  • global 连接池中最大的连接数

  • individual route 连接池中最大的连接数

  • 请求重试次数

  • 设置ssl 请求的证书 trust 策略和 cn host name 验证策略

  • 开启对于空闲连接以及过期连接的清理,设置空闲连接的时长

  • 是否重用池化对象以及使用长连接

我们通过如下代码设置上述 items :

RequestConfig requestConfig = RequestConfig.custom()                    .setConnectionRequestTimeout(10000)//设置连接池申请连接的超时时间,默认-1为无限时间                    .setConnectTimeout(5000)//设置socket进行3次握手建立连接的超时时间                    .setSocketTimeout(8000)//设置连接超时时间,即socket读写超时时间                    .setMaxRedirects(50)//设置最大的redirect次数,默认为50                    .setStaleConnectionCheckEnabled(Boolean.TRUE)//设置开启可用性检查,默认不开启                    .build();
CloseableHttpClient htttpClient = HttpClients.custom()                    .setDefaultRequestConfig(requestConfig)                    .setMaxConnPerRoute(50)//设置individual route连接池中最大的连接数,默认为2                    .setMaxConnTotal(500)//设置global连接池中最大的连接数,默认为20                    .setConnectionTimeToLive(-1, TimeUnit.MICROSECONDS)//设置连接池中连接存活时间,默认-1代表无限存活,连接使用之后由response header "Keep-Alive: timeout"决定。                    .evictIdleConnections(60000, TimeUnit.MILLISECONDS)//开启空袭连接清理线程,设置连接池中连接最大空闲时间,以及连接清理线程的sleep时间,默认为10秒                    .evictExpiredConnections()//开启过期连接清理线程,过期时间默认为-1,连接使用后由response header "Keep-Alive: timeout"决定。                    //.setRetryHandler(retryHandler)//设置重试策略,默认3次重试                    //.setSSLContext(sslContext)//设置ssl请求上下文                    //.setSSLHostnameVerifier(hostnameVerifier)//设置ssl证书cn host name验证策略,默认为验证cn host name                    .build();
如果希望重用池化对象并且保持长连接,那么务必请调用 EntityUtils 类之中的静态方法toByteArray(),toString(),consume(),consumeQuietly()等。如果不希望重用池化对象,同时也不希望使用长连接,那么请调用 CloseableHttpResponse 的close() 方法。另外我们也会经常使用 Spring 的 RestTemplate 来发送 https 请求,对于 RestTemplate 一般也是会去整合 Apache HttpComponents HttpClient 组件,所以在使用 RestTemplate 的时候也请考虑以上各个 items 的设置。

看完上述内容,你们对HttpComponents中如何使用HttpClient连接池有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI