一、前言
在Dubbo中接口类并不能唯一确定一个服务,在dubbo中接口+服务分组+版本号才能唯一确定一个服务,本文就来讲解下服务分组和版本号的使用。
二、服务分组
当一个接口有多种实现时,可以用 group 区分。
-
服务提供方:
上面配置在服务提供方法提供了com.test.UserServiceBo接口的两套实现,服务分组分别为olddubbo,newdubbo。
-
服务消费方
上面配置在服务消费方消费com.test.UserServiceBo接口的两套实现,服务分组分别为olddubbo,newdubbo。
需要注意的是消费方只能消费与自己服务分组相同的提供方的服务,这里userServiceOld生成的是服务提供方分组为olddubbo的接口的代理。
userServiceNew生成的是服务提供方分组为newdubbo的接口的代理。
三、服务版本
当同一个服务分组的接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用。
可以按照以下的步骤进行版本迁移:
- 在低压力时间段,先升级一半提供者为新版本
- 再将所有消费者升级为新版本
- 然后将剩下的一半提供者升级为新版本
比如:
- 服务提供方
服务提供方法在分组dubbo下提供了两个版本号的服务
- 服务消费方
同理需要注意的是服务消费方只能消费与自己接口+分组+版本一致的服务提供方的服务。
四、总结
dubbo中唯一确定一个服务的是接口+服务分组+版本号,服务提供方和消费方提供和消费服务时候显示的配置服务分组和版本号是一个最佳实践。
欢迎大家加入知识星球,在知识星球里面我们会深入讨论Java并发编程,以及JUC包源码;Java类加载器原理;Spring,Springboot,Tomcat,Dubbo等开源框架的使用以及源码剖析;分享作者从毕业到现在一路走来的学习经验,如何高效学习,如何阅读源码;讨论职业面试时候会经常遇到的问题以及如何作答,读者可以识别下面二维码加入: