10.dubbo服务多版本、多分组、分组聚合
来源:互联网 发布:mysql 前后空格为什么 编辑:程序博客网 时间:2024/06/01 09:24
1.多版本
当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用。
可以按照以下的步骤进行版本迁移:
- 在低压力时间段,先升级一半提供者为新版本
- 再将所有消费者升级为新版本
- 然后将剩下的一半提供者升级为新版本
(1)提供者
暴露的接口一样。接口版本和接口指定的实现不一样。完整配置文件如下
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:application name="d_zk_provider_app" /> <dubbo:registry address="zookeeper://192.168.88.131:2181" /> <dubbo:protocol name="dubbo" port="20880" /> <!-- 暴露老版本 --> <dubbo:service interface="com.tyf.d_zk_provider.modelService" ref="modelService1" version="1.0.0" /> <!-- 老版本实现 --> <bean id="modelService1" class="com.tyf.d_zk_provider.modelServiceImpl" /> <!-- 暴露新版本 --> <dubbo:service interface="com.tyf.d_zk_provider.modelService" ref="modelService2" version="2.0.0" /> <!-- 新版本实现 --> <bean id="modelService2" class="com.tyf.d_zk_provider.modelServiceImpl" /> <!-- 两个版本之间暴露的接口是一样的 --></beans>
查看dubbo-admin可以看到注册了两个服务实例只是版本号不同
(2)消费者
只需要修改引用的接口版本号就可以调用同一个接口的不同版本
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:application name="d_zk_consumer_app" /> <!-- 定义多个注册中心id区分 --> <dubbo:registry id="zk1" address="zookeeper://192.168.88.131:2181" /> <!-- 修改version就可以调用同一接口的不同版本 --> <dubbo:reference id="modelService" interface="com.tyf.d_zk_provider.modelService" version="2.0.0"/> </beans>
2.多分组
和多版本类似。同一个接口有多种实现的时候可以设置不同的分组分别将他们暴露。消费者在引用时可以指定不同的分组
(1)提供者
提供者配置文件
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:application name="d_zk_provider_app" /> <dubbo:registry address="zookeeper://192.168.88.131:2181" /> <dubbo:protocol name="dubbo" port="20880" /> <!-- 分组1 --> <dubbo:service interface="com.tyf.d_zk_provider.modelService" ref="modelService1" group="gro_1" /> <!-- 分组2 --> <dubbo:service interface="com.tyf.d_zk_provider.modelService" ref="modelService2" group="gro_2" /> <!-- 实现1 --> <bean id="modelService1" class="com.tyf.d_zk_provider.modelServiceImpl" /> <!-- 实现2 --> <bean id="modelService2" class="com.tyf.d_zk_provider.modelServiceImpl" /> <!-- 两个分组之间暴露的接口是一样的 --></beans>
在dubbo中也是注册成两个服务来实现的
消费者在引用的时候指定分组可以获取到同一接口的不同实现。消费者配置文件
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:application name="d_zk_consumer_app" /> <!-- 定义多个注册中心id区分 --> <dubbo:registry id="zk1" address="zookeeper://192.168.88.131:2181" /> <!-- 将同一接口注入成不同的实现 --> <dubbo:reference id="modelService" interface="com.tyf.d_zk_provider.modelService" group="gro_1"/> <dubbo:reference id="modelService" interface="com.tyf.d_zk_provider.modelService" group="gro_2" /> </beans>
3.分组聚合
就是消费者可以调用整个group或者其中的几个。将他们分别调用一次,最后返回一个结果(1)提供者
提供者配置文件同上同一个接口有gro_1和gro_2两种实现
(2)消费者
分组结果要用一个Merger实现来来接收
package com.tyf.d_zk_consumer;import com.alibaba.dubbo.rpc.cluster.Merger;public class myMerger implements Merger<String> {//将每个group都调用一次,结果存到arg数组里面,数组每个参数类型就是提供者接口的返回类型public String merge(String... arg) {for(int i=0;i<arg.length;i++){System.out.println(arg[i]);}return null;}}将这个类与配置文件绑定,创建一个文本文件
/resources/META-INF/dubbo/com.alibaba.dubbo.rpc.cluster.Merger
my=com.tyf.d_zk_consumer.myMerger这里my是一个name将它配置到消费者配置文件中,完整配置文件如下
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:application name="d_zk_consumer_app" /> <dubbo:registry id="zk1" address="zookeeper://192.168.88.131:2181" /> <!-- 调用同一接口的所有实现,*指定调用所有group。也可以调用其中某几个用逗号隔开 --> <dubbo:reference id="modelService" interface="com.tyf.d_zk_provider.modelService" group="*" merger="true"> <dubbo:method name="serviceTest" merger="my" /> </dubbo:reference> </beans>启动类
package com.tyf.d_zk_consumer;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.tyf.d_zk_provider.modelService;public class d_zk_consumer_App { public static void main(String[] args) { try { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( new String[] {"/META-INF/d_zk_consumer.xml"} ); context.start(); // 获取远程服务代理 modelService service = (modelService)context.getBean("modelService"); // 调用远程服务,获取调用结果 service1.serviceTest(); } catch (Exception e) {e.printStackTrace();} } }
阅读全文
0 0
- 10.dubbo服务多版本、多分组、分组聚合
- dubbo 分组聚合
- Dubbo分组聚合
- hsf dubbo学习五--服务分组,多版本,参数验证,结果缓存
- Dubbo服务分组
- Dubbo学习(四)服务分组
- 十三、Mysql 分组函数/聚合函数/多行处理函数
- 聚合分析与分组
- 聚合函数与分组
- 聚合分析和分组
- 聚合和分组
- Mongodb 聚合 分组
- 分组和聚合函数
- sql分组聚合练习
- 聚合函数与分组
- 聚合函数与分组
- 聚合函数与分组
- 聚合函数与分组
- nginx为什么比Apache支持高并发???
- SpringMVC的学习总结(一)
- Tensorboard使用学习笔记
- 4.数据结构单链表之链表成员的插入与删除
- Python基础 图像处理标准库 Pillow
- 10.dubbo服务多版本、多分组、分组聚合
- 一个特别有意思的程序,在一本书上的题目,但是书上答案是错的。
- lvextend
- hadoop单机版安装及基本功能演示
- 爬取QQ空间数据<Python爬虫入门>
- keystone从uuid token转到fernet token
- 如何在本地服务器部署网站
- 使用Ubuntu64 16.04 英文版环境安装搜狗输入法
- 使用sort()方法对列表进行永久性排序及临时排序