关于timeOut超时后是否会回滚的思考

  场景: 假设有2个系统,A和B,A系统调用B系统的接口,B系统正确接收到请求,但是由于接口内部业务逻辑复杂,耗时较长。导致A系统那边请求超时,于是A系统就断开了与B系统的连接。那么当A系统开端连接时,B系统能同时感受不到连接断开吗? 如果B系统不能同时感受到,当接口内部逻辑处理完成后需要返回结果进行return时,由于连接已断开,会否出现异常? B系统由于连接断开的异常会否导致接口内部事务的回滚?

 

  环境准备: Macos系统,openjdk11, dubbo(2.5.3版本),springboot

  结论:dubbo网络部分使用的netty,当B系统的接口内部逻辑处理完成后,最后会将需要return的内容传递到 Netty的 Nio Worker类  writeFromUserCode 方法里使用 Netty  自己自定义的NioSocketChannel去发送消息到A系统 。再发送之前,会检查channel的状态,由于socket连接已经断开了,此时channel就是不是“connected”状态,netty会把异常消息向外发送,最后被dubbo捕获,但是dubbo只是打印了一个warn日志,就结束了。

  

posted @ 2021-01-15 17:43  朝花不夕拾  阅读(578)  评论(0编辑  收藏  举报