JAVA-11: java.net.httpClient 如何设置重试?

标签 java httpclient java-11 java-http-client

目前,我正在用 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-11: java.net.httpClient 如何设置重试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54662730/

相关文章:

java - BigDecimal 的科学计数法舍入

java - 在 Java 中使用嵌套的 try 语句

java - 配置 OpenJFX 11 以将其 DLL 提取到不同的用户指定目录中?

java - 是否可以在 Maven payara-micro-maven-plugin 中设置端口以避免 "address already in use"运行多个实例?

java - 正确的 Java RTP/RTCP 堆栈

java:传递对象

java - Apache 或其他一些 CLIENT JAVA 实现是否支持 HTTP/2?

java - 当提供文件内容的字节流时定义文件体

android - 如何在android上实现一个HTTP服务器

java-time - Java 11 上的 DateTimeParseException 但适用于 Java 10