背景
A服务通过dubbo调用B服务,序列化方式选择的是kryo,A服务和B服务同时依赖C工程的一个DTO。 C工程的DTO新增了一个字段,deploy了,B服务引了最新的依赖。但是A服务并没有。 此字段,A服务并使用不上,也不关心。 此时,A服务调用B服务,则会出现如下序列化报错
排查
这个mDTO就是有变化的
解决方案一
通过让C的DTO使用release包,打包,不使用snapshot版本,这样,我们改变频率慢,而且很主动。 不然,每次deploy我们发布线上都会很头痛。
解决方案二
更改B服务和A服务之间的dubbo version,然后发布线上时候,先发一半的B服务,然后把A服务的发完,然后再把B服务发完。 这样做的好处是,可以让线上的A服务兼容发布,否则就会报一堆序列化错误。
解决方案三
切换序列化方式为protobuf
最终,第一个方案pass掉,属于治标不治本,属于规范层面问题。 第二个方案,可以维持一小段时间。 第三个方案,关联方比较多,耗时,但是利好千秋万代。
实际行动:临时先做第二个方案,长期推动第三个方案。