gpt4 book ai didi

httpclient - 请求重试 Apache HttpClient 之间的超时

转载 作者:行者123 更新时间:2023-12-03 22:53:40 27 4
gpt4 key购买 nike

有人可以分享如何配置现代 HttpClient 4.5.3 以重试失败的请求并在每次重试前等待一段时间吗?

到目前为止,我似乎正确理解了 .setRetryHandler(new DefaultHttpRequestRetryHandler(X, false))将允许重试请求 X 次。

但我不明白如何配置退避:.setConnectionBackoffStrategy()/.setBackoffManager()根据 JavaDocs 规范其他内容,而不是重试之间的超时。

最佳答案

关于动态延迟,我想提出以下建议:

CloseableHttpClient client = HttpClientBuilder.create()
.setRetryHandler(new HttpRequestRetryHandler() {
@Override
public boolean retryRequest(IOException exception, int executionCount, HttpContext context) {
return executionCount <= maxRetries ;
}
})
.setServiceUnavailableRetryStrategy(new ServiceUnavailableRetryStrategy() {
int waitPeriod = 100;
@Override
public boolean retryRequest(HttpResponse response, int executionCount, HttpContext context) {
waitPeriod *= 2;
return executionCount <= maxRetries &&
response.getStatusLine().getStatusCode() >= 500; //important!
}

@Override
public long getRetryInterval() {
return waitPeriod;
}
})
.build();

附录:
请注意,如果出现超时、端口未打开或连接关闭等 IO 错误,则不会调用 ServiceUnavailableRetryStrategy.retryRequest。在这种情况下,只会调用 HttpRequestRetryHandler.retryRequest ,并且重试将立即发生或在固定延迟后发生(我最终无法澄清这一点)。所以oleg的答案实际上是正确的。在 HttpClient 4.5 的支持下无法做到这一点。

(我实际上想将其称为设计错误,因为在现代微服务环境中,IO 错误后的延迟重试至关重要。)

关于httpclient - 请求重试 Apache HttpClient 之间的超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48541329/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com