基于dubbo分组group怎么实现

本文小编为大家详细介绍“基于dubbo分组group怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“基于dubbo分组group怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

服务分组

1.当一个接口有多种实现时,可用使用group分组。

实现代码如下:

package com.xxx.service;

public interface MyDubboGroupService {

	public String print();
	
}


package com.xxx.service.impl;

import com.xxx.service.MyDubboGroupService;

public class FeebackService implements MyDubboGroupService {

	@Override
	public String print() {
		// TODO Auto-generated method stub
		return "feedback";
	}

}


package com.xxx.service.impl;

import com.xxx.service.MyDubboGroupService;

public class CmsService implements MyDubboGroupService {

	@Override
	public String print() {
		// TODO Auto-generated method stub
		return "cms";
	}

}

applicationContext.xml 配置

<?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.xsd        http://code.alibabatech.com/schema/dubbo        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

	<!-- 配置Bean -->
	<bean id="feebackService" class="com.xxx.service.impl.FeebackService" />
	<bean id="cmsService" class="com.xxx.service.impl.CmsService" />
	
	<!-- 引入配置文件 -->
	<import resource="classpath:dubbo.xml" />
	
</beans>

dubbo.xml 配置

<?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.xsd        
    http://code.alibabatech.com/schema/dubbo        
    http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <!-- 指定服务名字 -->
    <dubbo:application name="dubboGroup" />

    <!-- 声明服务注册中心 -->
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />

    <!-- 暴露你的服务地址 -->
    <dubbo:service interface="com.xxx.service.MyDubboGroupService" group="feedback" />
    <dubbo:service interface="com.xxx.service.MyDubboGroupService" group="cms" />

</beans>

调用端dubbo.xml 配置

<?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.xsd        
    http://code.alibabatech.com/schema/dubbo        
    http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <!-- 指定web服务名字 -->
    <dubbo:application name="dubboGroup" />
    
    <!-- 声明服务注册中心 -->
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />

    <!-- 暴露你的服务地址 -->
    <dubbo:reference id="feebackService" interface="com.xxx.service.MyDubboGroupService" group="feedback" />
    <dubbo:reference id="cmsService" interface="com.xxx.service.MyDubboGroupService" group="cms" />
    <!-- 任意组 -->
    <dubbo:reference id="autoService" interface="com.xxx.service.MyDubboGroupService" group="*" />
    
</beans>

调用代码如下:

package com.xxx.application;

import java.io.IOException;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.xxx.service.MyDubboGroupService;

public class DubboApplication {
    
    public static void main(String[] args) throws IOException {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 访问feedback接口
        MyDubboGroupService feebackService = (MyDubboGroupService) ctx.getBean("feebackService");
        System.out.println(feebackService.print());
        // 访问member接口
        MyDubboGroupService cmsService = (MyDubboGroupService) ctx.getBean("cmsService");
        System.out.println(cmsService.print());
        // 访问随机接口
        MyDubboGroupService autoService = (MyDubboGroupService) ctx.getBean("autoService");
        System.out.println(autoService.print());
    }
    
}

2.上面调用端dubbo.xml 配置出现的任意组:(2.2.0以上版本支持,总是只调一个可用组的实现)

<dubbo:reference id="autoService" interface="com.xxx.service.MyDubboGroupService" group="*" />

分组聚合

按组合并返回结果,比如菜单服务,接口一样,但有多种实现,用group区分,现在消费方需从每种group中调用一次返回结果,合并结果返回,这样就可以实现聚合菜单项。(从2.1.0版本开始支持)

配置如:(搜索所有分组)

<dubbo:reference interface="com.xxx.MenuService" group="*" merger="true" />

或:(合并指定分组)

<dubbo:reference interface="com.xxx.MenuService" group="aaa,bbb" merger="true" />

或:(指定方法合并结果,其他未指定的方法,将只调用一个Group)

<dubbo:reference interface="com.xxx.MenuService" group="*">
    <dubbo:method name="getMenuItems" merger="true"/>
</dubbo:reference>

或:(某个方法不合并结果,其他都合并结果)

<dubbo:reference interface="com.xxx.MenuService" group="*" merger="true">
    <dubbo:method name="getMenuItems" merger="false"/>
</dubbo:reference>

或:(指定合并策略,缺省根据返回值类型自动匹配,如果同一类型有两个合并器时,需指定合并器的名称)

<dubbo:reference interface="com.xxx.MenuService" group="*">
    <dubbo:method name="getMenuItems" merger="mymerge"/>
</dubbo:reference>

或:(指定合并方法,将调用返回结果的指定方法进行合并,合并方法的参数类型必须是返回结果类型本身)

<dubbo:reference interface="com.xxx.MenuService" group="*">
    <dubbo:method name="getMenuItems" merger=".addAll"/>
</dubbo:reference>

读到这里,这篇“基于dubbo分组group怎么实现”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注本站行业资讯频道。

相关推荐:

Python task group 在异步任务编排

asyncio.taskgroup是python3.11引入的结构化并发工具,用于在任一子任务失败时自动取消其余任务,适用于需全成功才继续的服务端请求编排等场景。 asyncio.TaskGroup是什么,什么时候该用它 asyncio.TaskGroup是Python3.11引入的正式替代asyn...

如何获取 Zarr Group 的字节大小

本文介绍如何使用zarr库内置的`zarr.getsize()`函数快速、准确地获取zarrgroup(包括其所有子组和数组)在磁盘上占用的总字节数。 Zarr是一种用于存储N维数组的高效、分块、压缩格式,常用于大规模科学计算和遥感、生物信息等场景。与单个数组不同,ZarrGroup是一个容器结构,...

sql中group by用法

groupby根据列值分组数据,并对每组应用聚合函数(如sum、count、avg)。它常用于汇总数据、查找模式和对数据进行分类。具体步骤包括:1.指定要分组的列;2.选择要执行的聚合函数;3.应用groupby子句分组数据。 SQL中GROUPBY用法 什么是GROUPBY? GROUPBY是SQ...

group by可以有两个条件吗

是的,groupby可以有两个条件。使用groupby语句时,可以在groupby子句中指定多个列名,以便按这些列的值分组数据。 groupby可以有两个条件吗? 是的,groupby可以有两个条件。 如何使用groupby来分组多个列? 使用groupby语句时,可以在GROUPBY子句中指定多个...

group by having用法举例

groupbyhaving子句用于对分组后的数据进行筛选。它首先对数据进行分组,然后根据指定条件过滤结果。常见用法包括:找出特定分组的总和或平均值。查找满足特定条件的分组。对分组数据进行聚合计算,例如求和、求平均值或计数。 GroupByHaving用法举例 GroupByHaving子句是SQL中...

group by rollup函数

groupbyrollup函数用于将数据集按列分组并汇总,创建不同层次的汇总,从最详细到最汇总,包括按各列分组以及所有行的汇总,从而提高查询效率和数据探索的灵活性。 GROUPBYROLLUP:了解其用途和示例 GROUPBYROLLUP函数 GROUPBYROLLUP函数用于将数据集按指定列进行分...

group by函数怎么用

groupby函数可将数据按列值分组,应用聚合函数(如sum)运算,以显示每个组的唯一值和聚合结果。 GROUPBY函数 GROUPBY函数允许您将数据集中的行分组,基于一个或多个共同的列值。 语法SELECT列名,聚合函数(列名) FROM表名 GROUPBY列名参数 列名:要分组的列。 聚合函数...

group by用法

groupby是一种sql聚合函数,可对表数据按列分组,并对每个组进行聚合计算。语法:1.指定分组列:groupby子句中指定要分组的列。2.执行聚合计算:使用聚合函数对分组列计算。3.根据分组获取结果:查询返回聚合结果,每一行为一个组。 GROUPBY用法 定义 GROUPBY是一种SQL聚合函数...