在apache httpclient 4.3中,默认HttpRequestRetryHandler的代码
if (exception instanceof InterruptedIOException) { // Timeout return false; }
超时了就不重试了,是什么原因呢?有时候网络不稳定,我就想重试连接,我可以用自己的RetryHandler,但是我就是想确认一下超时重试有没有问题。
pgx2nnw81#
如果超时,它不会重试。原因是什么?为什么要这样做?超时通常定义了两个连续操作之间的最长不活动时间。如果请求首先超时,为什么要重试?如果您愿意等待更长的时间来完成操作,您应该使用更大的超时值。
bvjveswy2#
这对我很有帮助。我试着禁用重试选项。下面的代码做了相反的事情。
DefaultHttpClient httpClient = new DefaultHttpClient(); DefaultHttpRequestRetryHandler retryHandler = new DefaultHttpRequestRetryHandler(0, true); httpClient.setHttpRequestRetryHandler(retryHandler);
谢谢
j5fpnvbx3#
我在商业上使用了一个自定义的RetryHandler,它模仿了Default*,但允许对我们经常遇到的以下异常进行重试:ConnectTimeoutException和HttpHostConnectException。这些异常在15s超时后抛出很多。连接应该在亚秒级进行,所以我们现在在5s超时下重试3次,这表明第二次尝试时成功连接的数量大幅增加。我们仍在调查为什么Azure应用服务和内部部署服务之间的连接请求没有及时发出。
3条答案
按热度按时间pgx2nnw81#
如果超时,它不会重试。原因是什么?
为什么要这样做?超时通常定义了两个连续操作之间的最长不活动时间。如果请求首先超时,为什么要重试?如果您愿意等待更长的时间来完成操作,您应该使用更大的超时值。
bvjveswy2#
这对我很有帮助。我试着禁用重试选项。下面的代码做了相反的事情。
谢谢
j5fpnvbx3#
我在商业上使用了一个自定义的RetryHandler,它模仿了Default*,但允许对我们经常遇到的以下异常进行重试:ConnectTimeoutException和HttpHostConnectException。这些异常在15s超时后抛出很多。连接应该在亚秒级进行,所以我们现在在5s超时下重试3次,这表明第二次尝试时成功连接的数量大幅增加。
我们仍在调查为什么Azure应用服务和内部部署服务之间的连接请求没有及时发出。