我们在使用Dubbo的过程中,时常会碰到这个异常。而有可能导致这个异常的原因是非常多的,排查起来比较困难。下面把如何排查该问题的思路整理了一下,目前我知道的会导致这个异常的原因分为以下几类:
-
1.需要进行序列化的POJO类没有进行序列化,多是入参中的一些参数实体类。这个原因是最容易发现的,因为未序列化的类会在异常信息中显示,在日志信息中搜索“Serializable”,即可找到对应的类,再将其实现序列化即可。
-
2.Dubbo Provider 服务部署存在问题。检查你服务器上的dubbo服务是否正常,检查服务器是否存在问题(比如服务器上是否存在虚拟机网络)。最好尝试重新部署dubbo,通过invoke命令调用一下确认服务没有问题。
-
3.防火墙对应端口没有开启, 这种情况一般出现在外网调用时。dubbo默认端口是20880(这个可以通过修改配置更改)。
在 /etc/sysconfig/iptables中添加下边内容(以下命令是开启20880端口,有可能还需开启其他端口):
-A INPUT -m state --state NEW -m tcp -p tcp --dport 20880 -j ACCEPT
表示开启20880端口,然后:service iptables restart 重启防火墙即可。
Windows开启方法:控制面板—防火墙—高级—入站规则—新建规则—填写—下一步…
- 4.invoke方法代码执行过程中出现异常导致(也有可能是切面中存在异常,小心)。
按照以上顺序依次排查,问题应该不难找到。