org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool

Java HttpUtil 出现错误:org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool

        最近项目中大量调用http请求,线上出现了ConnectionPoolTimeoutException 这个问题,但是本地服务器一直没能复现出来,但是定位问题应该是之前调用http的工具类封装的有问题,连接池设置的不对,但是一看目前项目中设置的数据和网上的大相径庭,以下是部分设置:

clientConnectionManager.setMaxTotal(300);
clientConnectionManager.setDefaultMaxPerRoute(30);
clientConnectionManager.setValidateAfterInactivity(1000);
private static final RequestConfig defaultRequestConfig = RequestConfig.custom()
        .setSocketTimeout(3000)
        .setConnectTimeout(3000)
        .setConnectionRequestTimeout(3000)
        .build();

在网上找了一些资料后,发现应该是调用接口这里处理的有问题

if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
            // 请求成功状态
            String resultMsg = String.join("", IOUtils.readLines(response.getEntity().getContent(), StandardCharsets.UTF_8));
            logger.info("httpClient 请求返回结果: {}", resultMsg);
            return resultMsg;
        }

这里的原因就是如果状态码返回了非200,即使用了连接池,也不会释放连接。本地用工具调用一个返回404的地址,果然在超过30个请求后,开始报错了,然后连接池阻塞卡死了。问了现场之后发现现场也是有个接口访问不到,一直返回404,定位到问题了,剩下的就是改写代码让出现异常的时候仍然释放连接。

参考了以下的博客进行解决:

HttpClient大并发下Timeout waiting for connection from pool 问题解决方案_独行-浪子的博客-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值