如何将HttpComponentsHttpClient连接池结构改写为支持长连接的httpclient设置?
- 内容介绍
- 文章标签
- 相关推荐
本文共计694个文字,预计阅读时间需要3分钟。
在平时进行HTTP调用的时侯,我们经常使用Apache HttpClient这个组件。它提供了HTTP连接池管理,下面我们对它的实现进行分析。
在我们平时进行http调用的时候经常使用apachehttpclient这个组件它提供了http连接池管理这里我们对它的实现做分析。另外除了http 在我们平时进行 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请求的支持
连接池中的长连接
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 为 routevalue 为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主要属性有idroute 和 managedConnection。
ManagedHttpClientConnection 类型实例对象中包含AtomicReference 类型对象包装引用原始 socket代表 http 连接。
目前先写到这里在下一篇文章里我们开始介绍http连接的申请释放重用以及 keep alive。
本文共计694个文字,预计阅读时间需要3分钟。
在平时进行HTTP调用的时侯,我们经常使用Apache HttpClient这个组件。它提供了HTTP连接池管理,下面我们对它的实现进行分析。
在我们平时进行http调用的时候经常使用apachehttpclient这个组件它提供了http连接池管理这里我们对它的实现做分析。另外除了http 在我们平时进行 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请求的支持
连接池中的长连接
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 为 routevalue 为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主要属性有idroute 和 managedConnection。
ManagedHttpClientConnection 类型实例对象中包含AtomicReference 类型对象包装引用原始 socket代表 http 连接。
目前先写到这里在下一篇文章里我们开始介绍http连接的申请释放重用以及 keep alive。

