HttpComponents HttpClient连接池(1)-结构

在我们平时进行 http调用的时候经常使用apache httpclient这个组件,它提供了http连接池管理,这里我们对它的实现做分析。另外除了httpclient组件,也可以使用spring的resttemplate组件,resttemplate一般也是整合 httpclient 组件来实现 http 调用。对于比较老的httpclient 版本(3.x)建议不要使用,这里我们基于http components httpclient  4.5.9版本,包括一下内容:

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

  • http连接的申请

  • http连接的释放

  • http连接的重用

  • http连接的keep alive

  • http连接的可用性检查

  • 空闲http连接的清理

  • http请求的retry

  • SSL请求的支持

  • 连接池中的长连接

httpclient 关键类和数据结构

CPool 代表 httpclient连接池,其里面存放 CpoolEntry 类型对象作为池化item,该对象包含ManagedHttpClientConnection类型对象,ManagedHttpClientConnection包装原始java socket作为http连接:

  • CPool==>httpclient 连接池

  • CPoolEntry==>连接池中的 item

  • ManagedHttpClientConnection==>包装 socket,代表 http 连接

  • PoolingHttpClientConnectionManager==>连接池管理器

  • HttpClientBuilder==>Builder 模式实现创建 httpclient

  • httpclient 连接池对于每一个 fqdn + port 定义为唯一 route,对于每一个 route 都有一个 RouteSpecificPool 类型对象对应。这个对象也是一个连接池,既在 httpclient 连接池里,对每一个 route 访问都独立建立各自的连接池,从而实现不同 route 访问连接池隔离。在连接池对象 Cpool 里由 Map 存储,key 为 route,value 为RouteSpecificPool 对象。

  • 连接池对象里有 Set 类型集合 leased,代表 global 连接池里正在使用的连接集合。

  • 连接池对象实例里有 LinkedList 类型集合 available,代表 global 连接池里可用的连接集合,每次申请连接的时候优先从这个集合里获取。

  • 连接池对象里有 LinkedList 类型集合 pending,代表 global 连接池里已经没有可用连接的时候,正在等待申请的 items 集合。

  • 对于单独 route 的连接池,有Set类型集合 leased,代表 individual 连接池里正在使用的连接集合。

  • 对于单独 route 的连接池,有 LinkedList 类型集合 available,代表individual 连接池里可用的连接集合,每次申请连接的时候优先从这个集合里获取。

  • 对于单独 route 的连接池,有 LinkedList 类型集合 pending,代表 individual 连接池里已经没有可用连接的时候,正在等待申请的 items集合。

  • CpoolEntry 类型对象代表 global 连接池和 individual 连接池里的池化 item,主要属性有id,route 和 managedConnection。

  • ManagedHttpClientConnection 类型实例对象中包含AtomicReference<Socket> 类型对象,包装引用原始 socket,代表 http 连接。

目前先写到这里,在下一篇文章里我们开始介绍http连接的申请,释放,重用以及 keep alive。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值