网关使用 Apache HttpClient 连接池出现异常
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
最近网关在发版时出现了大量的org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool
异常。这是由于在高并发场景下,不使用连接池时,HTTP连接的建立过程耗时,特别是需要三次握手的HTTP连接。使用连接池可以重用已建立的连接,提高访问的吞吐量。
虽然传统的HttpURLConnection
不支持连接池,但Apache的HttpClient
支持。高并发场景下,如网关系统,使用HttpClient
和连接池可以提高TPS。Apache HttpClient
的早期版本使用PoolingClientConnectionManager
和DefaultHttpClient
实现连接池,但这些在4.3.x版本后过时,新版本使用PoolingHttpClientConnectionManager
。
为了使用Apache HttpClient的连接池特性,需要在pom.xml
中添加httpclient
、httpcore
和httpclient-cache
等依赖。连接池的主要参数配置在HttpPoolProperties
类中,包括maxTotal
、defaultMaxPerRoute
、maxPerRoute
等,控制连接数和超时设置。
获取HttpClient
对象的代码示例展示了如何创建一个配置有连接池的CloseableHttpClient
实例。其中包括了设置最大连接数、默认路由的最大连接数、针对特定主机的最大连接数,以及对请求重试的处理策略。
文章最后提醒读者点赞和关注,表达对读者的感谢。
想要了解更多内容?