es JestClientFactory 使用的http连接池解
2021-05-14 本文已影响0人
邵红晓
- 使用同步update api,查看源码发现使用
httpclient4.5.6
中PoolingHttpClientConnectionManager
-
com.arronlong.httpclientutil
中封装的http连接池同样使用的httpclient4.5.6
中 PoolingHttpClientConnectionManager - 提醒 springboot默认集成的jest,无法设置maxTotalConnection,默认20会造成连接数不足,影响生产
PoolingHttpClientConnectionManager核心参数解释和设置
-
maxTotalConnection
:单个连接池实例能允许的最大连接数 -
defaultMaxTotalConnectionPerRoute
: 单个路由的最大连接数,一个ip:port就是一个路由,比如www.baidu.com,www.google.com,就表示两个路由,在es中配置单路由连接数应该和最大连接数据相等或者小于,也就是说发起服务的主机连接到路由的最大连接数,也就是并发量 -
connTimeout
ms 连接超时时间,客户端请求服务器与服务器建立连接(三次握手)成功的最大接受时间 -
readTimeout
(socketTimeout) ms 请求获取数据的超时时间,访问一个接口指定时间内无法返回数据,直接放弃此次调用 -
maxConnectionIdleTime
连接池中连接的最大空闲时间
连接池取连接
连接池中获取连接时从org.apache.http.pool.AbstractConnPool#getPoolEntryBlocking
,改方法时同步方法,需要预先获取锁,http连接存储在LinkedList中
使用连接池的好处
因为使用它可以有效降低延迟和系统开销。如果不采用连接池,每当我们发起http请求时,都需要重新发起Tcp三次握手建立链接,请求结束时还需要四次挥手释放链接。而链接的建立和释放是有时间和系统开销的。另外每次发起请求时,需要分配一个端口号,请求完毕后在进行回收。
使用链接池则可以复用已经建立好的链接(长连接),一定程度的避免了建立和释放链接的时间开销。