You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RestTemplate仅能同时维持2个连接,请求阻塞问题排查求助

问题原因

你当前的RestTemplate配置里,HttpClient使用了默认的连接池参数,其中默认最大总连接数是2,所以超过2个并发请求时,后续请求会被阻塞等待空闲连接。

解决方案

需要显式配置HttpClient的连接池参数,调整最大总连接数和每个路由的最大连接数,示例配置如下:

TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true;
SSLContext sslContext = new SSLContextBuilder()
        .loadTrustMaterial(null, acceptingTrustStrategy)
        .build();
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext);

// 配置连接池
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
// 设置最大总连接数,根据业务需求调整
connectionManager.setMaxTotal(20);
// 设置每个路由的最大连接数,根据目标服务数量和并发需求调整
connectionManager.setDefaultMaxPerRoute(10);

CloseableHttpClient httpClient = HttpClients.custom()
        .setSSLSocketFactory(socketFactory)
        .setConnectionManager(connectionManager) // 绑定连接池
        .build();

HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
// 可选:设置连接超时、读取超时
factory.setConnectTimeout(5000);
factory.setReadTimeout(10000);

return new RestTemplate(factory);
关键参数说明
  • setMaxTotal:设置连接池的最大总连接数,控制所有目标服务的并发连接总数。
  • setDefaultMaxPerRoute:设置单个路由(即单个目标服务地址)的最大连接数,避免对单个服务的连接占用过多资源。
  • 额外的超时配置可以避免请求长时间挂起,提升服务稳定性。

内容的提问来源于stack exchange,提问作者user5301398

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 18:48:15