
之前发过一篇因为接口规范的问题导致其它端出现服务不可用的文章(http://www.cnblogs.com/zdd-java/p/8612763.html),然而最近在查阅了dubbo官方指南文档才知道其实可以通过多版本号解决前面那个问题,经过自己在本地测试后总结如下。
官方原内容如下:
当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用。
可以按照以下的步骤进行版本迁移:
- 在低压力时间段,先升级一半提供者为新版本
- 再将所有消费者升级为新版本
- 然后将剩下的一半提供者升级为新版本
老版本服务提供者配置: <dubbo:service interface="com.foo.BarService" version="1.0.0" /> 新版本服务提供者配置: <dubbo:service interface="com.foo.BarService" version="2.0.0" /> 老版本服务消费者配置: <dubbo:reference id="barService" interface="com.foo.BarService" version="1.0.0" /> 新版本服务消费者配置: <dubbo:reference id="barService" interface="com.foo.BarService" version="2.0.0" /> 如果不需要区分版本,可以按照以下的方式配置 1: <dubbo:reference id="barService" interface="com.foo.BarService" version="*" />
验证过程:
#启动2个服务提供者分别为s1,s2,这2个服务都注册到本地的zk上。其中s1保留旧版本也就是 1.0,s2是升级后的版本也就是 2.0。
s2服务
#2.0版本返回的类型是String。
s1服务
#1.0版本还是返回的类型是boolean。
当上面2个服务都成功启动后开始从消费方发起对不同版本的模拟调用。