dubbo调用问题之序列化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dubbo调用问题之序列化相关的知识,希望对你有一定的参考价值。

参考技术A dubbo的版本是2.5.3,接口调用后,provider方接收不到请求,超时后报错:Waiting server-side response timeout by scan timer.详细日志如下:

通过dubbo admin查看providers和consumers,可以找到服务,双方状态正常,dubbo版本也一致。 其实如果接口的provider方异常,调用方直接会收到类似于No provider available 或Forbid consumer access service from registry use dubbo version 2.5.3, Please check registry access list (whitelist/blacklist)的错误提示。
然后,查看接口请求参数,发现其实现了java序列化接口,和错误日志中的序列化方式一致。

后来测试时发现,竟然存在部分请求成功,着重分析后发现请求对象数据存在差异,请求对象的类定义中部分自定义域没有实现序列化接口。之前调用成功的请求中,其请求参数中未实现序列化的字段值为null。后来测试当整个请求参数不实现序列化时,发现接收方也可以收到请求。

跨服务调用时,传参必须实现序列化,其内部引用的对象也必须序列化。

1.方法的参数没有实现序列化,或其内部引用的对象没有实现序列化。
2.方法返回值没有序列化。(根据错误日志就能看明确发现)
3.调用双方形参版本不一致。(根据错误日志就能看明确发现)
4.注册中心配置错误导致的异常。(根据错误日志或dubbo admin可以明确发现)
5.网络异常导致的超时。

以上是关于dubbo调用问题之序列化的主要内容,如果未能解决你的问题,请参考以下文章

分布式服务之Dubbo

Dubbo

Dubbo反序列化(CVE-2020-1948)绕过之二

再谈序列化之rpc调用失败和jackson序列化时不允许Map中的key为null

架构师之路-在Dubbo中开发REST风格的远程调用

dubbo