- dubbo客户端接受不了服务端返回的数据
1.1报错现象
1.1.1、客户端
1.1.2服务端:
进入了具体业务逻辑,但是客户端没有获取到数据。
1.2 dubbo客户端与服务端网络通讯顺序:
客户端encoder、服务端decoder、具体业务逻辑、服务端encoder、客户端decoder。
1.3、bug定位
1.3.1、先debug定位
客户端encoder
服务端decoder
业务逻辑
服务端encoder
然后客户端就一直没有结束到数据,导致超时。
问题就应该是服务端encoder至客户端接受这块有问题。
1.3.2、借助工具
从github下载一个与当前系统中版本一样的dubbo,这里用的是2.7.22。
io.netty.handler.logging.LoggingHandler是netty提供的工具类,
修改dubbo NettyClient
修改dubbo NettyServer
去本地maven仓库找到dubbo-2.7.22.jar,把编译好的NettyClient.class、NettyServer.class
跟新到dubbo-2.7.22.jar包中
客户端-encoder日志
服务端-decoder日志
服务端-业务日志
没有发现服务端encoder日志,问题发生在服务端
1.3.3、再次debug定位
org.apache.dubbo.remoting.transport.netty4.NettyCodecAdapter
com.alipay.sofa.tracer.plugins.dubbo.wrapper.DataSizeCodecWrapper
io.netty.handler.codec.MessageToByteEncoder#write
就是引入<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>tracer-sofa-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>导致问题。
把该jar包隐藏掉,刷新一下再验证一下
1.3.4、验证是否正常
客户端-encoder
服务端decoder
服务端业务日志
服务端encoder
客户端decoder
正常
1.3.5总结
起始1.3.1、1.3.3就可以定位出该问题,引入1.3.2虽然更直观定位问题所在,但是会浪费一些时间。