本篇文章为大家展示了如何解析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,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。