Liberar la conexión de Rest Template del pool.
Tengo una configuración similar a la siguiente para mi RestTemplate. Estoy intentando liberar una conexión del pool si obtengo un código de estado que no sea 2XX (es una larga historia, pero necesito este código). ¿Existe alguna manera de obtener el gestor de conexiones y liberar una conexión específica?
@Bean
public RestTemplate restTemplate() {
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
connectionManager.setMaxTotal(100);
connectionManager.setDefaultMaxPerRoute(20);
RequestConfig requestConfig = RequestConfig
.custom()
.setConnectionRequestTimeout(5000) // tiempo de espera para obtener conexión del pool
.setSocketTimeout(5000) // tiempo de espera de conexión estándar
.setConnectTimeout(5000) // tiempo de espera de conexión estándar
.build();
HttpClient httpClient = HttpClientBuilder.create()
.setConnectionManager(connectionManager)
.setDefaultRequestConfig(requestConfig).build();
ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
return new RestTemplate(requestFactory);
}
Buscando una manera de lograr algo similar a lo siguiente:
if(!httpStatusCode.substr(1).equals("2")) {
restTemplate.getConnectionPool().release().thisConnection();
}
davy.ai
Sí, puedes liberar una conexión específica del grupo de conexiones utilizando la instancia
PoolingHttpClientConnectionManager
. Puedes obtener el administrador de conexiones desde la instancia deHttpClient
y luego llamar a su métodoreleaseConnection()
para liberar una conexión específica. Aquí tienes un ejemplo:Ten en cuenta que deberás reemplazar
"tu_host_aqui"
con el host real al que te estás conectando. Además, asegúrate de manejar adecuadamente cualquier excepción que pueda ocurrir durante el proceso de creación y liberación de la conexión.