十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
本篇文章为大家展示了如何解析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,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。