前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HttpComponents HttpClient连接池(1)-结构

HttpComponents HttpClient连接池(1)-结构

作者头像
TA码字
发布2020-04-01 11:08:26
1.5K0
发布2020-04-01 11:08:26
举报
文章被收录于专栏:TA码字TA码字

在我们平时进行 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 连接。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 TA码字 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档