JAVA-11: java.net.httpClient 如何设置 Retry.



目前,我正在用JDK-11的新Http库替换现有的org.apache.http.* http客户端库。有许多令人兴奋的新功能,但是我没有找到任何关于"如何在新的HTTPClient中设置RetryRequestHandler"的内容。以前的 Apache HttpClient 构建器的代码片段:

    ...
    ...
    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中没有设置重试的选项。有什么解决方法吗?

Spring

已经将重试从 Spring Batch 分解为一个单独的、独立的库,你可以使用(尽管是在 Spring 项目中(。它将允许您将重试策略添加到调用新 HTTP 客户端的方法。请参阅下面的文档:

https://github.com/spring-projects/spring-retry

这是我所知道的这种情况最接近的事情。如果你想自己动手,你也可以在方面完成同样的事情。我认为 Spring 库更干净,因为您可以让库处理重试的细节。它们还有一组强大的 API,用于不同的重试策略,包括指数退避等。

默认情况下,java.net.http HttpClient 将重试一次幂等请求 (GET/HEAD(。这在 HTTP/1.1 长实时连接上通常很有用,其中服务器端可能会任意决定连接保持空闲时间过长,并在客户端将其从池中取出并开始发送新请求的同时关闭它。

相关内容

  • 没有找到相关文章

最新更新