Qu'est-ce qui peut provoquer une connexion obsolète dans Spring Boot Restapi à l'aide de RestTemplate

Jan 09 2021

J'ai lu que "les connexions obsolètes sont le résultat de la déconnexion du serveur, mais le client ne sait pas." Mais j'essaie de trouver comment c'est possible si j'utilise mon application basée sur SpringBoot RestTemplate (en utilisant plus loin PoolConnectionManager d'Apache) et que j'appelle une autre API à partir de mon application? Dans ce cas, mon application est un client et l'application que j'appelle agit en tant que serveur. Si je frappe cette application et que l'API que j'appelle reçoit la demande mais tombe en panne avant de remplir complètement la demande. Dans ce cas, j'obtiendrai sûrement l'exception de ma part. Et je suis presque sûr que dans le cas où PoolConnectionManager doit fermer cette connexion. Alors, comment puis-je avoir une connexion obsolète?

Réponses

2 Lokesh Jan 12 2021 at 13:47

Par défaut, PoolConnectionManager ne ferme pas la connexion bloquée à moins que vous ne la configuriez pour cela. La méthode setValidateAfterInactivity()est utilisée pour configurer cette période.

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

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

Vous pouvez trouver un exemple similaire dans StackOverflow ici

** Mise à jour après les questions de suivi **

Sur la base de la documentation, le comportement est légèrement modifié par rapport à la version 4.4.

La gestion des connexions périmées a été modifiée dans la version 4.4. Auparavant, le code vérifiait chaque connexion par défaut avant de la réutiliser. Le code ne vérifie désormais la connexion que si le temps écoulé depuis la dernière utilisation de la connexion dépasse le délai qui a été défini. Le délai d'expiration par défaut est défini sur 2000 ms

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