java Apache http客户端:为什么超时时不重试

f5emj3cl  于 2023-01-19  发布在  Java
关注(0)|答案(3)|浏览(112)

在apache httpclient 4.3中,默认HttpRequestRetryHandler的代码

if (exception instanceof InterruptedIOException) {
        // Timeout
        return false;
    }

超时了就不重试了,是什么原因呢?有时候网络不稳定,我就想重试连接,我可以用自己的RetryHandler,但是我就是想确认一下超时重试有没有问题。

pgx2nnw8

pgx2nnw81#

如果超时,它不会重试。原因是什么?
为什么要这样做?超时通常定义了两个连续操作之间的最长不活动时间。如果请求首先超时,为什么要重试?如果您愿意等待更长的时间来完成操作,您应该使用更大的超时值。

bvjveswy

bvjveswy2#

这对我很有帮助。我试着禁用重试选项。下面的代码做了相反的事情。

DefaultHttpClient httpClient = new DefaultHttpClient();
DefaultHttpRequestRetryHandler retryHandler = new DefaultHttpRequestRetryHandler(0, true);
httpClient.setHttpRequestRetryHandler(retryHandler);

谢谢

j5fpnvbx

j5fpnvbx3#

我在商业上使用了一个自定义的RetryHandler,它模仿了Default*,但允许对我们经常遇到的以下异常进行重试:ConnectTimeoutException和HttpHostConnectException。这些异常在15s超时后抛出很多。连接应该在亚秒级进行,所以我们现在在5s超时下重试3次,这表明第二次尝试时成功连接的数量大幅增加。
我们仍在调查为什么Azure应用服务和内部部署服务之间的连接请求没有及时发出。

相关问题