温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何解析HttpRequestRetryHandler

发布时间:2021-10-21 10:11:15 来源:亿速云 阅读:367 作者:柒染 栏目:大数据

本篇文章为大家展示了如何解析HttpRequestRetryHandler,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

在进行批量插入到clickhouse数据库的时候,出现了这种问题:

21:28:02.022 [pool-5-thread-9] INFO  o.a.http.impl.execchain.RetryExec - I/O exception (java.net.SocketException) caught when processing request to {}->http://35.26.59.191:8123: Broken pipe (Write failed) 
21:28:02.029 [pool-5-thread-9] INFO  o.a.http.impl.execchain.RetryExec - Retrying request to {}->http://35.26.59.191:8123

原先是:断开的管道

18:34:50.032 [pool-11-thread-10] INFO  o.a.http.impl.execchain.RetryExec - I/O exception (java.net.SocketException) caught when processing request to {}->http://35.26.59.191:8123: >断开的管道
18:34:50.033 [pool-11-thread-10] INFO  o.a.http.impl.execchain.RetryExec - Retrying request to {}->http://35.26.59.191:8123

我还以为是连接时长过短的原因:(但是并没有用)

clickhouse.socketTimeout=6000000

后面查阅了相关资料才发现,HttpClient有默认的重试策略。

对于我们的场景应用中的get与post,可以总结为:

只有发生IOExecetion时才会发生重试 InterruptedIOException、UnknownHostException、ConnectException、SSLException,发生这4中异常不重试 get方法可以重试3次,post方法在socket对应的输出流没有被write并flush成功时可以重试3次。 首先分析下不重试的异常:

InterruptedIOException,线程中断异常 UnknownHostException,找不到对应host ConnectException,找到了host但是建立连接失败。 SSLException,https认证异常 另外,我们还经常会提到两种超时,连接超时与读超时:

java.net.SocketTimeoutException: Read timed out java.net.SocketTimeoutException: connect timed out 这两种超时都是SocketTimeoutException,继承自InterruptedIOException,属于上面的第1种线程中断异常,不会进行重试。

由于SocketException extends IOException,所以会尝试重试

总结 1.只有发生IOExecetion时才会发生重试 2.InterruptedIOException、UnknownHostException、ConnectException、SSLException,发生这4中异常不重试 3.get方法可以重试3次,post方法在socket对应的输出流没有被write并flush成功时可以重试3次。 4.读/写超时不进行重试 5.socket传输中被重置或关闭会进行重试 6.以及一些其他的IOException,暂时分析不出来。

上述内容就是如何解析HttpRequestRetryHandler,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI