RestTemplate如何增加最大TCP连接数?

问题描述

我有RestTemplate:

@Bean(name = "restTemplateBean")
public RestTemplate restTemplate(RestTemplateBuilder builder) {
    return builder
            .interceptors(new HttpRequestInterceptor())
            .uriTemplateHandler(new DefaultUriBuilderFactory((host + ":" + port)))
            .build();
}

当我多次调用RestTemplate时(例如,发布请求),它最多创建5〜10个TCP连接。如何增加RestTemplate创建的最大连接数?

解决方法

您可以利用Apache的HttpClient的连接池。使用HttpClientBuilder并增加 maxConnPerRoute maxConnTotal 来达到您想要的性能:

@Bean
public HttpClientBuilder httpClientBuilder() {
    return HttpClients.custom()
            .setMaxConnPerRoute(PER_ROUTE)
            .setMaxConnTotal(TOTAL);
}

@Bean
public RestTemplate restTemplate(HttpClientBuilder httpClientBuilder) {
    HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();

    requestFactory.setHttpClient(httpClientBuilder.build());
    
    return new RestTemplate(requestFactory);
}

maxConnPerRoute限制单个IP:端口可以建立的连接数,而maxTotal限制可以打开的总连接数。