Apache httpclient 并发请求时的注意设置

Apache httpclient 并发请求时的注意设置

还是前几天并发请求的需求,当时发现测试里直接开十个线程请求,比项目里请求要快上一倍,

俺直呼不对劲不对劲,哈哈哈哈,第一时间想到用的 restTemplate 底层用到了线程池,但是并没有十个同时进行,所以排队请求,耗时多了一倍,

后面发现项目里 restTemplate 用的 Apache httpclient,

1
2
3
4
5
6
7
8
9
10
private static ClientHttpRequestFactory buildClientHttpRequestFactory(){
...
PoolingHttpClientConnectionManager phccm = new PoolingHttpClientConnectionManager(registry);
// 这里是线程池里所有线程数
phccm.setMaxTotal(200);
//phccm.setDefaultMaxPerRoute(10); 之前没有加上
CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).setConnectionManager(phccm).setConnectionManagerShared(true).build();
factory.setHttpClient(httpClient);
return factory;
}

DefaultMaxPerRoute 意思是某一个服务每次能并行接收的请求数量,点进源码一看,默认并行请求数量为 2,怪不得项目里这么慢。哈哈哈,后面就加上了phccm.setDefaultMaxPerRoute(10); ,再进行测试,耗时少了一倍,心满意足🤣


Apache httpclient 并发请求时的注意设置
http://xxpain.github.io/2021/08/23/resttemplate/
作者
无情小肥羊
发布于
2021年8月23日
许可协议