HttpComponents HttpClient连接池-总结_weixin_46073333的博客-CSDN博客_httpcomponents http连接池

标签: | 发表时间:2020-07-19 23:01 | 作者:
出处:https://blog.csdn.net
在之前文章里我们以学习为目的介绍了 Apache HttpComponents HttpClient 连接池这个组件,包括如下项 :

httpclient连接池中的关键类和数据结构

httpclient连接池中http连接的申请

httpclient连接池中http连接的释放

httpclient连接池中http连接的重用

httpclient连接池中http连接的keep alive

httpclient连接池中http连接的可用性检查

httpclient连接池中空闲http连接的清理

httpclient连接池中http请求的retry

httpclient连接池对SSL请求的支持

httpclient连接池中的长连接

httpclient连接池的使用建议

这里把以前文章做如下汇总,以方便大家阅读学习:



当然除了这个组件之外,我们也会经常使用 Spring 的 RestTemplate 对象实例来发送 https请求,一般情况下 RestTemplate 对象实例也是会整合 Apache HttpComponents HttpClient 组件,所以我们在使用 RestTemplate 的时候也可以考虑以上作为参考。



对于 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 weixin] 推荐:

HttpComponents HttpClient连接池-总结_weixin_46073333的博客-CSDN博客_httpcomponents http连接池

- -
在之前文章里我们以学习为目的介绍了 Apache HttpComponents HttpClient 连接池这个组件,包括如下项 :. httpclient连接池中的关键类和数据结构. httpclient连接池中http连接的申请. httpclient连接池中http连接的释放. httpclient连接池中http连接的重用.

HttpClient 与 Close_Wait

- - 互联网 - ITeye博客
服务器A需要通过HttpClient去连接另一个系统B提供的服务,运行一段时间后抛出以下异常:. 在服务器B上运行netstat命令,发现大量连接处于 CLOSE_WAIT 状态. 简单来说CLOSE_WAIT数目过大是由于被动关闭连接处理不当导致的. 我说一个场景,服务器A会去请求服务器B上面的apache获取文件资源,正常情况下,如果请求成功,那么在抓取完资源后服务器A会主动发出关闭连接的请求,这个时候就是主动关闭连接,连接状态我们可以看到是TIME_WAIT.

Httpclient远程调用WebService示例(Eclipse+httpclient)

- - 企业架构 - ITeye博客
我们将Web Service发布在Tomcat或者其他应用服务器上后,有很多方法可以调用该Web Service,常用的有两种:.       1、通过浏览器HTTP调用,返回规范的XML文件内容.       2、通过客户端程序调用,返回结果可自定义格式.       接下来,我利用Eclipse作为开发工具,演示一个Httpclient调用WebService的简单示例.

HttpClient使用详解

- - CSDN博客推荐文章
HttpClient:是一个接口. 首先需要先创建一个DefaultHttpClient的实例. 先创建一个HttpGet对象,传入目标的网络地址,然后调用HttpClient的execute()方法即可:. 创建一个HttpPost对象,传入目标的网络地址:. 通过一个NameValuePair集合来存放待提交的参数,并将这个参数集合传入到一个UrlEncodedFormEntity中,然后调用HttpPost的setEntity()方法将构建好的UrlEncodedFormEntity传入:.

HttpComponents分析之连接池实现 - jinspire - 博客园

- -
早期的Http是这样的,一次http请求完成后,立即关闭连接. 如果请求的数据非常少而次数又极多,那么通讯效率是非常低的. 其实很简单,只需在建立连接后,完成通话先等待一段时间,看对方在这段时间内是否还有话说,如果有话说,那么继续通信,否则过了这段时间后就关闭连接. 这种解决方案在Http协议中也有体现,即keep-alive.

Apache HttpClient 4.3开发指南

- - CSDN博客推荐文章
《Apache HttpClient 4.3开发指南》. 作者:chszs,转载需注明. 博客主页: http://blog.csdn.net/chszs. Apache HttpClient 4系列已经发布很久了,但由于它与HttpClient 3.x版本完全不兼容,以至于业内采用此库的公司较少,在互联网上也少有相关的文档资料分享.

Android HttpURLConnection及HttpClient选择

- - Trinea
介绍Android中Http请求方式的选择、区别及几个常用框架对API的选择. Android Http请求API主要分两种:. 第一种是Java的HttpURLConnection,默认带gzip压缩. 第二种Apache的HttpClient,默认不带gzip压缩. 两种方式请求connection都是keep alive,默认User-Agent不同.

HttpClient 连接池管理

- - IT瘾-dev
随着微服务的流行,服务之间的http调用越来越多. 在java里面我们可以使用httpclient这个开源工具类来进行处理,但若使用不当,可能性能会比较差,尤其是连接池是否能正常使用. 接下来会详细分析下httpclient的连接池原理. 使用httpclient的好处. 1)、降低延迟:如果不采用连接池,每次连接发起Http请求的时候都会重新建立TCP连接(经历3次握手),用完就会关闭连接(4次挥手),如果采用连接池则减少了这部分时间损耗.

配置使用连接池的httpClient

- - 企业架构 - ITeye博客
httpClient4.3开始弃用了DefaultHttpClient和PoolingClientConnectionManager.原来这样配置的连接工厂. 现在改用spring推荐的类,配置如下:.   配置带有连接池的org.springframework.web.client.RestTemplate.

HttpUrlconnection 、Httpclient get 、post 请求核心代码

- - CSDN博客推荐文章
HttpURLConnection的使用  . * URL请求的类别分为二类,GET与POST请求. * a:) get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet, . * b:) post与get的不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内.