在使用RestTemplate的Spring引导Restapi中,什么会导致过时的连接



我读到了"陈旧的连接是服务器断开连接但客户端不知道的结果"但我正在努力寻找在我使用基于SpringBoot RestTemplate的应用程序(进一步使用Apache中的PoolConnectionManager(并从我的应用程序调用另一个API的情况下如何可能?在这种情况下,我的应用程序是一个客户端,我调用的应用程序充当服务器。如果我命中了该应用程序,并且我调用的api接收到请求,但在完全填充请求之前不知何故发生了故障。在这种情况下,我肯定会得到例外。我非常确信,万一PoolConnectionManager必须关闭该连接。那我怎么会有过时的连接呢?

默认情况下,PoolConnectionManager不会关闭过时的连接,除非您将其配置为关闭。方法setValidateAfterInactivity()用于配置该时间段。

PoolingHttpClientConnectionManager connManager 
= new PoolingHttpClientConnectionManager();
connManager.setValidateAfterInactivity(20);
HttpClient httpClient = HttpClients.custom().setConnectionManager(connManager).build();

你可以在这里的StackOverflow 中找到一个类似的例子

**跟进问题后更新**

基于文档,行为从版本4.4有所改变。

4.4版中更改了对陈旧连接的处理。以前,默认情况下,代码会在正在使用它。该代码现在只在自上次使用连接以来的时间超过了已设置。默认超时设置为2000ms

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

最新更新