¿Qué puede causar una conexión obsoleta en Spring Boot Restapi usando RestTemplate?

Jan 09 2021

Leí que "las conexiones obsoletas son el resultado de que el servidor desconecta la conexión pero el cliente no lo sabe". Pero estoy tratando de encontrar cómo es posible en caso de que esté usando mi aplicación basada en SpringBoot RestTemplate (más usando PoolConnectionManager de Apache) y llamando a otra API desde mi aplicación. En este caso, mi aplicación es un cliente y la aplicación a la que llamo actúa como servidor. Si llego a esa aplicación, y la API a la que estoy llamando recibe la solicitud, pero de alguna manera se rompe antes de completar la solicitud. En este caso, seguramente obtendré la excepción al final. Y estoy bastante seguro de que en caso de que PoolConnectionManager deba cerrar esa conexión. Entonces, ¿cómo puedo tener una conexión obsoleta?

Respuestas

2 Lokesh Jan 12 2021 at 13:47

De forma predeterminada, PoolConnectionManager no cierra la conexión obsoleta a menos que la configure para hacerlo. El método setValidateAfterInactivity()se utiliza para configurar ese período de tiempo.

PoolingHttpClientConnectionManager connManager 
          = new PoolingHttpClientConnectionManager();
        connManager.setValidateAfterInactivity(20);

        HttpClient httpClient = HttpClients.custom().setConnectionManager(connManager).build();

Puede encontrar un ejemplo similar en StackOverflow aquí

** Actualización después de seguir las preguntas **

Basado en el comportamiento de la documentación se ha cambiado un poco desde la versión 4.4.

El manejo de conexiones obsoletas se cambió en la versión 4.4. Anteriormente, el código verificaba todas las conexiones de forma predeterminada antes de reutilizarlas. El código ahora solo verifica la conexión si el tiempo transcurrido desde el último uso de la conexión excede el tiempo de espera establecido. El tiempo de espera predeterminado se establece en 2000 ms

https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.html#setValidateAfterInactivity(int)