httpClient连接池管理,你用对了?

本文探讨了HttpClient连接池的使用,强调了连接池在减少延迟和系统开销方面的作用。介绍了如何设置连接池的最大连接数、存活时间和路由限制,并提醒在请求完成后正确归还连接,以避免ConnectionPoolTimeoutException等异常。此外,文章还提到了自http1.1后http的keep-alive特性,以及自定义ConnectionKeepAliveStrategy的重要性。
摘要由CSDN通过智能技术生成

一、前言

为何要用http连接池那?因为使用它我们可以得到以下好处:

因为使用它可以有效降低延迟和系统开销。如果不采用连接池,每当我们发起http请求时,都需要重新发起Tcp三次握手建立链接,请求结束时还需要四次挥手释放链接。而链接的建立和释放是有时间和系统开销的。另外每次发起请求时,需要分配一个端口号,请求完毕后在进行回收。

使用链接池则可以复用已经建立好的链接,一定程度的避免了建立和释放链接的时间开销。

二、连接池使用

public static void init() {
 //1.创建连接池管理器
 PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(60000,//1.1
   TimeUnit.MILLISECONDS);
 connectionManager.setMaxTotal(1000);//1.2
 connectionManager.setDefaultMaxPerRoute(50);//1.3

 //2.创建httpclient对象
 httpClient = HttpClients.custom()
   .setConnectionManager(connectionManager)//2.1
   .disableAutomaticRetries()//2.2
   .build();
}

如上代码1,我们创建了一个连接池管理器,ClientConnectionPoolManager会维护每个路由维护和最大连接数限制。默认情况下,此实现将为每个给定路由创建不超过2个并发连接,并且总共不超过20个连接。对于许多现实应用程序,这些限制可能证明过于严格。但是,我们可以自由来调整连接限制。

另外构造函数中可以设置持久链接的存活时间TTL(timeToLive),其定义了持久连接的最大使用时间,超过其TTL值的链接不会再被复用。

如上代码1.1我们设置TTL为60s(tomcat服务器默认支持保持60s的链接,超过60s,会关闭客户端的链接)。代码1.2我们设置连接器最多同时支持1000个链接,代码1.3设置每个路由最多支持50个链接。注意这里路由是指IP+PORT或者指域名。如果使用域名来访问则每个域名有自己的链接池,如果使用IP+PORT访问ÿ

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值