Tengo RestTemplate:

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

Cuando llamo una gran cantidad de veces a RestTemplate (solicitudes de publicación, por ejemplo), crea un máximo de 5 ~ 10 conexiones TCP. ¿Cómo podría aumentar el número máximo de conexiones creadas por RestTemplate?

1
Volodya Lombrozo 1 sep. 2020 a las 13:30

1 respuesta

La mejor respuesta

Puede aprovechar la agrupación de conexiones con HttpClient de Apache. Utilice HttpClientBuilder y aumente maxConnPerRoute y maxConnTotal para alcanzar el rendimiento que está buscando:

@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 limita la cantidad de conexiones que se pueden realizar a una sola IP: puerto, y maxTotal limita la cantidad total de conexiones que se pueden abrir.

3
munzld 1 sep. 2020 a las 12:33