- 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虽然更直观定位问题所在,但是会浪费一些时间。
文章描述了Dubbo客户端在接收服务端返回数据时遇到的问题,通过debug和使用工具如LoggingHandler和tracer-sofa-boot-starter,最终定位到问题在于服务端的NettyCodecAdapter和DataSizeCodecWrapper,以及特定的依赖库版本。
398

被折叠的 条评论
为什么被折叠?



