Dubbo 服务分组与多版本
前言
大家好,今天开始给大家分享 — Dubbo 专题之 Dubbo 服务分组与多版本。在上一个章节中我们学习了 Dubbo 动态配置中心,主要讲解了怎样分离我们的配置文件统一维护到配置中心。在这个章节中我们继续讨论 Dubbo 的服务分组与多版本。那就让我们快速开始吧!
1. 服务分组与多版本简介
在前面章节《Dubbo 动态配置中心》中,有的小伙伴可能会疑惑到我们暴露的服务使用了版本号0.0.1
,那这个版本号代表什么意思呢?其实在 Dubbo 中默认是没有版本号,我们在《Dubbo 服务注册与发现》章节中介绍了服务提供者向注册中心注册的元数据中就包含了:接口全限定名、方法名称、版本号、分组等,这里我们的一个服务的唯一标识就是通过这四个方面来限定的。假设同一个服务和同一个方法有不同的版本号或分组那么这个就代表是不同的服务。
如上图,我们定义了一个queryAll
方法但是使用了版本和分组分别是:(0.0.1+g1)、(0.0.2+g2)的两种组合,那么在客户端就存在着这两种服务的调用。我们只要记住:Dubbo 服务调用唯一标识一个服务的四要素。
2. 配置方式
2.1 注解配置方式
@DubboService(version="0.0.1",,group = "g1)
@DubboReference(version = "0.0.1",group = "g1")
2.2 XML 配置方式
服务提供配置:
<dubbo:service interface="com.muke.dubbocourse.common.api.BookFacade" ref="bookFacade" version="0.0.1" group="g1"/>
复制代码
服务消费配置:
<dubbo:reference id="bookFacade" check="false" interface="com.muke.dubbocourse.common.api.BookFacade" version="0.0.1" group="g1"></dubbo:reference>
复制代码
2.3 Java 配置方式
ReferenceConfig<GenericService> reference = new ReferenceConfig<GenericService>();
// 弱类型接口名
reference.setInterface("com.muke.dubbocourse.common.api.BookFacade");
//设置版本
reference.setVersion("1.0.0");
//设置分组
reference.setGroup("g1");
// 声明为泛化接口
reference.setGeneric(true);
// 用org.apache.dubbo.rpc.service.GenericService可以替代所有接口引用
GenericService genericService = reference.get();
复制代码
3. 使用场景
前面我们已经了解了多版本和分组简单使用,那么在我们的应用中有什么使用场景呢?对应版本来说我们通常维护多版本的意义其实就是功能升级、bug 修复等。而分组的概念主要用于同一个接口用于不同的逻辑形成以组进行业务逻辑的划分。
当我们提供一个 Dubbo 服务给上游系统使用,过了一段时间我们需要对次接口新增业务逻辑,那么我们在测试完新增业务功能后上线时我们需要对新增处理逻辑的接口维护一个新版本。这样在新版本上线后逐渐让老版本用户切换新版本,等切换完成关闭老版本服务实现业务上线版本切换。
我们对接第三方支付系统中常常接收异步通知,那么网关系统在接受异步通知后会分发消息到各个系统。我们的做法是网关提供一个接口让各个需要通知的的系统自行实现接口并且使用不同的分组来标识,这样网关系统就可以进行对不同分组进行通知处理。
4. 示例演示
在 Dubbo 中我们可以采用 XML 来配置服务或者使用基于注解的配置。我们这里还是采用传统的 XML 方式来配置演。项目结构如下:
重点查看我们的 XML 配置文件。消费者配置文件dubbo-consumer-xml.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<dubbo:application name="demo-consumer" logger="log4j"/>
<!--使用zookeeper注册中心-->
<dubbo:registry address="zookeeper://127.0.0.1:2181" />
<dubbo:reference id="bookFacade" interface="com.muke.dubbocourse.protocol.api.BookFacade" version="0.0.1" group="g1"></dubbo:reference>
</beans>
复制代码
在消费者 XML 配置中指定引用服务的版本:0.0.1
、分组:g1
。
服务提供者配置文件dubbo-provider-xml.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<dubbo:application name="demo-provider" metadata-type="remote"/>
<!--使用zookeeper注册中心-->
<dubbo:registry address="zookeeper://127.0.0.1:2181" />
<bean id="bookFacade" class="com.muke.dubbocourse.versiongroup.provider.BookFacadeImpl" />
<!--暴露本地服务为Dubbo服务-->
<dubbo:service interface="com.muke.dubbocourse.protocol.api.BookFacade" ref="bookFacade" version="0.0.1" group="g1"/>
</beans>
复制代码
在服务提供者 XML 配置中指定暴露服务的版本:0.0.1
、分组:g1
。
在上面服务端配置的 XML 中如果配置的版本和分组信息与消费端配置的版本和分组信息不匹配,那么服务就查找不到抛出错误。
**Tips :**错误信息类似 No provider available for xxx
5. 小结
在本小节中我们主要学习了 Dubbo 中的服务分组与多版本,其中我们值得注意的是接口全限定名、方法名、版本、分组 4 个元素唯一确定一个服务,服务分组与多版本都是基于这 4 个维度来进行判断。同时我们也知道了多种配置方式以及简单的使用。
本节课程的重点如下:
理解什么是服务分组与多版本
了解 Dubbo 中多种分组与多版本配置方式
了解服务分组与多版本查找逻辑
了解服务分组与多版本使用场景
作者
个人从事金融行业,就职过易极付、思建科技、某网约车平台等重庆一流技术团队,目前就职于某银行负责统一支付系统建设。自身对金融行业有强烈的爱好。同时也实践大数据、数据存储、自动化集成和部署、分布式微服务、响应式编程、人工智能等领域。同时也热衷于技术分享创立公众号和博客站点对知识体系进行分享。关注公众号:青年 IT 男 获取最新技术文章推送!
博客地址: http://youngitman.tech
微信公众号:
评论