彻底掌握网络通信(六)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,暂时分析不出来。

参考:https://blog.csdn.net/weixin_34128534/article/details/86807209

转载于:https://my.oschina.net/u/4131327/blog/3082287

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值