首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAVA-11: java.net.httpClient如何设置重试?

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

Stack Overflow用户
提问于 2019-02-13 04:50:50
回答 2查看 4.1K关注 0票数 5

目前,我正在用org.apache.http.* JDK-11的新 http 库替换现有的Http客户端库。但是,我还没有发现任何关于“如何在新HttpClient中设置RetryRequestHandler”的功能。

代码语言:javascript
复制
    ...
    ...
    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的扩展

代码语言:javascript
复制
public class RetryRequestHandler extends DefaultHttpRequestRetryHandler{...} 

没有在java-11的新HttpClient中设置重试的选项。有什么解决办法吗?

EN

回答 2

Stack Overflow用户

发布于 2019-02-13 04:55:58

Spring已经将Spring批处理中的重试分离为一个单独的独立库,您可以使用这个库(尽管在Spring项目中)。它将允许您向调用新HTTP客户端的方法添加重试策略。见下面的文档:

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

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

票数 1
EN

Stack Overflow用户

发布于 2019-02-13 10:37:05

默认情况下,java.net.http HttpClient将重试幂等请求(GET/HEAD)一次。这在HTTP/1.1长寿命连接上通常是有用的,服务器端可能会任意地决定连接一直处于空闲状态太久,并在客户端将其从池中取出并开始发送新请求的同时关闭连接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54662730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档