前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >duubo分组聚合 原

duubo分组聚合 原

作者头像
尚浩宇
发布2018-08-17 11:17:15
4100
发布2018-08-17 11:17:15
举报
文章被收录于专栏:杂烩杂烩杂烩

除了官网上有这部分的简单介绍外,在别的地方几乎找到真正可行的测试了,这里自己捣鼓一下,已做备忘。

为什么会用到分组聚合呢?有这么一个需求,将配置下发到每个节点,正常的多个服务者,只会调用一个,但我期望的是每一个都被调用,于是分组聚合就排上用场了。

调用多个服务者,肯定也会返回多个返回值,分组聚合的重点也就是在这里,当然如果是void的,更简单,这里说的带返回值的。官方提供两种方式:

    1、第一种是执行返回对象里的一个方法,每拿到一个返回值,就调用一次,并将上一次调用结果当作参数传入。配置如下:

<dubbo:reference id="canalAgentService" interface="com.voole.datasync.service.agent.canal.ICanalAgentService" group="*" >
		<dubbo:method name="deployCanal" merger=".addAll" />
	</dubbo:reference>

注意参数类型必须和返回值类型一致,否则不可用

    2、第二种是指定合并器,也就是自己实现一个接口,dubbo将所有返回值一次性全部传递给你,然后你返回一个唯一的值

这种相对比较方便,首先实现

com.alibaba.dubbo.rpc.cluster.Merger

public class StatusRetMerger<StatusRet> implements Merger<StatusRet> {

	/*
	 * (非 Javadoc) <p>Title: merge</p> <p>Description: </p>
	 * 
	 * @param items
	 * 
	 * @return
	 * 
	 * @see com.alibaba.dubbo.rpc.cluster.Merger#merge(java.lang.Object[])
	 */
	@Override
	public StatusRet merge(StatusRet... items) {
		System.out.println(items);
		return null;
	}

}

 然后在resource下建立/data_sync_admin/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.rpc.cluster.Merger,注意com.alibaba.dubbo.rpc.cluster.Merger是个文本文件,内容为

statusRet=com.shy.StatusRetMerger

最终在xml配置

<dubbo:reference id="canalAgentService" interface="com.voole.datasync.service.agent.canal.ICanalAgentService" group="*" >
		<dubbo:method name="deployCanal" merger="statusRet" />
	</dubbo:reference>

    最后说一下几个问题

    1、分组可以指定某几个组合并

    2、方式2中要注意那个文本文件,如果加载不到会出现各种奇怪的错误

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017/08/21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档