基于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>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 关于微服务使用Dubbo设置的端口和server.port的区别

    目录 微服务使用Dubbo设置端口和server.port区别 Dubbo暴露接口注意端口号要不一样 微服务使用Dubbo设置端口和server.port区别 server: port: 8081 spring: application: name: user-consumer dubbo: protocol: name: dubbo port: 20881 registry: address: nacos://127.0.0.1:8848 consumer: check: false 这里的两

  • springboot 整合 dubbo 的实现组聚合详情

    目录 消费者 自定义聚合策略 如何自定义 dubbo 聚合策略? 提供者 接口及其实现 表结构及数据 消费者 yml 文件配置: dubbo: application: name: dubbo-gateway registry: address: zookeeper://127.0.0.1:2181 server: true provider: timeout: 3000 protocol: name: dubbo port: 20881 controller 类: @RestControlle

  • 关于dubbo 自定义线程池的问题

    目录 初识dubbo 一.什么是dubbo? 二.为什么要用dubbo 前言 dubbo线程池 dubbo线程池说明 自定义线程池代码实现步骤 初识dubbo 一.什么是dubbo? Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC(一种远程调用) 分布式服务框架(SOA),致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案,其实就是一种远程服务调用的分布式框架 二.为什么要用dubbo 在互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式

  • 基于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 imp

  • 详解SpringBoot基于Dubbo和Seata的分布式事务解决方案

    1. 分布式事务初探 一般来说,目前市面上的数据库都支持本地事务,也就是在你的应用程序中,在一个数据库连接下的操作,可以很容易的实现事务的操作. 但是目前,基于SOA的思想,大部分项目都采用微服务架构后,就会出现了跨服务间的事务需求,这就称为分布式事务. 本文假设你已经了解了事务的运行机制,如果你不了解事务,那么我建议先去看下事务相关的文章,再来阅读本文. 1.1 什么是分布式事务 对于传统的单体应用而言,实现本地事务可以依赖Spring的@Transactional注解标识方法,实现事务非常简

  • 基于 Dubbo Admin 临时踢除问题服务实例步骤

    目录 开始之前 背景信息 操作步骤 动态配置 规则详解 配置模板 结果验证 Dubbo提供临时踢除问题服务实例的服务治理能力,可以在无需重启应用的情况下,临时踢除问题服务实例. Dubbo可以通过XML配置,注解配置,动态配置实现临时踢除问题服务实例,这里主要介绍动态配置的方式,其他配置方式请参考旧文档配置 开始之前 请确保成功运行Dubbo-Admin 背景信息 服务在线上运行的过程中,难免遇到某些节点有问题,为了不影响整体服务的正常运行,需要临时下线问题的服务实例.Dubbo-Admin提供

  • 基于 Dubbo Admin 动态调整服务超时时间的操作步骤

    目录 开始之前 背景信息 操作步骤 规则详解 结果验证 Dubbo提供动态调整超时时间的服务治理能力,可以在无需重启应用的情况下,动态调整服务超时时间. Dubbo可以通过XML配置,注解配置,动态配置实现动态调整超时时间,这里主要介绍动态配置的方式,其他配置方式请参考旧文档配置 开始之前 请确保成功运行Dubbo-Admin 背景信息 在日常工作中会遇到各类超时配置,业务逻辑变更后,已有调用关系随着业务发展可能需要不断调整,相应服务接口响应时间的变化可能需要上线后才能确定.Dubbo-Admi

  • 基于dubbo中Listener的实现方法

    这里继续dubbo的源码旅程,在过程中学习它的设计和技巧,看优秀的代码,我想对我们日程编码必然有帮助的.而那些开源的代码正是千锤百炼的东西,希望和各位共勉. 拿ProtocolListenerWrapper为例子,看源码的时候发现它是一个装饰类的标准实现有一个自身的复制构造函数,把被包装者复制进来,然后结合装饰部分的操作.看下ProtocolListenerWrapper类有这样的代码: public class ProtocolListenerWrapper implements Protoc

  • 基于mysql实现group by取各分组最新一条数据

    前言: group by函数后取到的是分组中的第一条数据,但是我们有时候需要取出各分组的最新一条,该怎么实现呢? 本文提供两种实现方式. 一.准备数据 http://note.youdao.com/noteshare?id=dba748092a619be0a8f160ccf6e25a5f&sub=FD4C1C7823CA440DB360FEA3B4A905CD 二.三种实现方式 1)先order by之后再分组: SELECT * FROM (SELECT * from tb_dept ORDE

  • spring @Validated 注解开发中使用group分组校验的实现

    之前知道spring支持JSR校验,在自己定义的bean中加入@NotNull,@NotBlank,@Length等之类的校验用于处理前台传递过来的request请求,避免在写多余的代码去处理. 但是随着业务的复杂度增加,对于校验的制定也越来越有要求,这个时候就需要引入分组group的概念,在自定义注解@Validated中 定义了一个Class[]数组用来分组.这样我们就可以引入分组校验的概念,首先根据需要的分组新建自己的接口. 然后在需要校验的bean上加入分组: 最后根据需要,在Contr

  • SQL分组函数group by和聚合函数(COUNT、MAX、MIN、AVG、SUM)的几点说明

    1 分组聚合的原因 SQL中分组函数和聚合函数之前的文章已经介绍过,单说这两个函数有可能比较好理解,分组函数就是group by,聚合函数就是COUNT.MAX.MIN.AVG.SUM. 拿上图中的数据进行解释,假设按照product_type这个字段进行分组,分组之后结果如下图. SELECT product_type from productgroup by product_type 从图中可以看出被分为了三组,分别为厨房用具.衣服和办公用品,就相当于对product_type这个字段进行了

  • 分布式服务Dubbo+Zookeeper安全认证实例

    前言 由于之前的服务都是在内网,Zookeeper集群配置都是走的内网IP,外网不开放相关端口.最近由于业务升级,购置了阿里云的服务,需要对外开放Zookeeper服务. 问题 Zookeeper+dubbo,如何设置安全认证?不想让其他服务连接Zookeeper,因为这个Zookeeper服务器在外网. 查询官方文档: Zookeeper 是 Apacahe Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使

  • 基于Django框架的权限组件rbac实例讲解

    1.基于rbac的权限管理 RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,一个角色拥有若干权限.这样,就构造成"用户-角色-权限"的授权模型.在这种模型中,用户与角色之间,角色与权限之间都是多对多的关系. 简单的模型图示如下: 2.Rbac组件的基本目录结构: 3.按照写的流程,来讲解rbac组件中的各个部分,以及功能, 3.1 models数据库表设计(models.py). 为了在

随机推荐