目前,我正在用org.apache.http.* JDK-11的新 http 库替换现有的Http客户端库。但是,我还没有发现任何关于“如何在新HttpClient中设置RetryRequestHandler”的功能。
...
...
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create()
.setDefaultRequestConfig(config)
.setConnectionManager(connectionManager)
if(retryCount > 0) {
httpClientBuilder.setRetryHandler(new RetryRequestHandler(retryCount, url));
}
if (proxyHost) {
HttpHost proxy = new HttpHost(proxyHost, proxyPort, "http");
httpClientBuilder.setProxy(proxy);
}
...
...这里RetryRequestHandler是DefaultHttpRequestRetryHandler的扩展
public class RetryRequestHandler extends DefaultHttpRequestRetryHandler{...} 没有在java-11的新HttpClient中设置重试的选项。有什么解决办法吗?
发布于 2019-02-13 04:55:58
Spring已经将Spring批处理中的重试分离为一个单独的独立库,您可以使用这个库(尽管在Spring项目中)。它将允许您向调用新HTTP客户端的方法添加重试策略。见下面的文档:
https://github.com/spring-projects/spring-retry
对于这种情况,这是我所知道的最接近的事情。如果你想自己滚,你也可以用方面完成同样的事情。我认为Spring库更干净,因为您可以让库处理重试的细节。它们还为不同的重试策略提供了一组强大的API,包括指数退避等。
发布于 2019-02-13 10:37:05
默认情况下,java.net.http HttpClient将重试幂等请求(GET/HEAD)一次。这在HTTP/1.1长寿命连接上通常是有用的,服务器端可能会任意地决定连接一直处于空闲状态太久,并在客户端将其从池中取出并开始发送新请求的同时关闭连接。
https://stackoverflow.com/questions/54662730
复制相似问题