Was kann zu einer veralteten Verbindung in Spring Boot Restapi mit RestTemplate führen?

Jan 09 2021

Ich habe gelesen, dass "veraltete Verbindungen darauf zurückzuführen sind, dass der Server die Verbindung getrennt hat, der Client dies jedoch nicht weiß." Aber ich versuche herauszufinden, wie es möglich ist, wenn ich meine Anwendung basierend auf SpringBoot RestTemplate (weiterhin PoolConnectionManager von Apache) verwende und eine andere API aus meiner Anwendung aufrufe? In diesem Fall ist meine Anwendung ein Client und die von mir aufgerufene Anwendung fungiert als Server. Wenn ich auf diese Anwendung treffe und die API, die ich anrufe, die Anfrage empfängt, bricht sie jedoch irgendwie zusammen, bevor die Anfrage vollständig ausgefüllt wird. In diesem Fall werde ich sicherlich die Ausnahme an meinem Ende bekommen. Und ich bin mir ziemlich sicher, dass PoolConnectionManager diese Verbindung schließen muss. Wie kann ich dann jemals eine veraltete Verbindung haben?

Antworten

2 Lokesh Jan 12 2021 at 13:47

Standardmäßig schließt PoolConnectionManager die veraltete Verbindung nur, wenn Sie sie dafür konfigurieren. Die Methode setValidateAfterInactivity()wird verwendet, um diesen Zeitraum zu konfigurieren.

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

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

Ein ähnliches Beispiel finden Sie im StackOverflow hier

** Update nach weiteren Fragen **

Basierend auf der Dokumentation wird das Verhalten gegenüber Version 4.4 etwas geändert.

Die Behandlung veralteter Verbindungen wurde in Version 4.4 geändert. Bisher überprüfte der Code standardmäßig jede Verbindung, bevor er wieder verwendet wurde. Der Code überprüft die Verbindung jetzt nur, wenn die seit der letzten Verwendung der Verbindung verstrichene Zeit das festgelegte Zeitlimit überschreitet. Das Standardzeitlimit ist auf 2000 ms eingestellt

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