Open skysoul1985 opened 8 years ago
找到原因了,dubbox中的kyro注册类型的顺序问题导致;kyro会为每个注册类进行数字编号,dubbox中缺省注册了一些类型(比如double[]类型的编号是54),如果用户自定义注册类型,默认会从55开始,即顺序编号; 我们项目出现这个问题的主要原因是:我们有两个独立应用都对外提供服务,但是应用通过kyro注册自定义bean是独立的,所以两个应用自定义bean排序都是从55开始;现在有第三个独立应用想调用前面的两个服务的api,因此需要把前面的两个应用的相关bean都注册进入kyro中,因为是顺序编号的,这就导致其中肯定有一个应用的bean的顺序和原有的应用是不一致的情况;
不知道谁有啥较好的解决方案?
看了下你们的实现,这个是可以解决,但是不会使用到kryo的优化吧,应该会用到kyro的序列化,但是头部类型定义应该是将完整的包和类路径都打包在里面,如果register,则头部类型定义就是一个数字标号,减少整个序列化后的长度
Caused by: com.esotericsoftware.kryo.KryoException: Unable to find class: x13b4c1339765d6e5
发布的一个接口服务,在消费方调用的时候,出现如上问题kyro反序列化失败(但有的时候接口调用又正常,但是将消费端服务重启后,就出现此问题)
尝试过清空zookeeper的dubbo注册信息,第一次ok,但是重启消费端后,在继续的时候又出现问题;也尝试过在register增加file配置(以为是localcache的冲突问题,我的java应用都是在同一台机器上);如果都没最终解决问题! 还请高人帮忙指点指点!