千家信息网

如何通过API方式使用dubbo泛化调用

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍"如何通过API方式使用dubbo泛化调用",在日常操作中,相信很多人在如何通过API方式使用dubbo泛化调用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
千家信息网最后更新 2026年11月02日如何通过API方式使用dubbo泛化调用

这篇文章主要介绍"如何通过API方式使用dubbo泛化调用",在日常操作中,相信很多人在如何通过API方式使用dubbo泛化调用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何通过API方式使用dubbo泛化调用"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

泛化是啥?

官网解释:泛化接口调用方式主要用于客户端没有 API 接口及模型类元的情况,参数及返回值中的所有 POJO 均用 Map 表示,通常用于框架集成,比如:实现一个通用的服务测试框架,可通过 GenericService 调用所有服务实现。

我跑去问组长,他们那天说的泛化是啥?我们什么场景要用啊?

泛化就是你不知道你不关心下层实现,只需要约定接口及参数,实现由下层实现,但是这样一来扩展性和可用性极低,不如你约定一个接口,提供方注册到ZK上,消费方去ZK去拉,或者干脆提供个jar包,然后通过普通的注册去调用就可以。

至于场景是因为临时接入的第三方数据服务,不能直接调用,我们中间提供了接口,实现是他们实现的。

通过 Spring 使用泛化调用

在 Spring 配置申明 generic="true":


在 Java 代码获取 barService 并开始泛化调用:

GenericService barService = (GenericService) applicationContext.getBean("barService");
Object result = barService.$invoke("sayHello", new String[] { "java.lang.String" }, new Object[]

通过 API 方式使用泛化调用

import org.apache.dubbo.rpc.service.GenericService;
...

// 引用远程服务
// 该实例很重量,里面封装了所有与注册中心及服务提供方连接,请缓存
ReferenceConfig reference = new ReferenceConfig();
// 弱类型接口名
reference.setInterface("com.xxx.XxxService");
reference.setVersion("1.0.0");
// 声明为泛化接口
reference.setGeneric(true);

// 用org.apache.dubbo.rpc.service.GenericService可以替代所有接口引用
GenericService genericService = reference.get();

// 基本类型以及Date,List,Map等不需要转换,直接调用
Object result = genericService.$invoke("sayHello", new String[] {"java.lang.String"}, new Object[] {"world"});

// 用Map表示POJO参数,如果返回值为POJO也将自动转成Map
Map person = new HashMap();
person.put("name", "xxx");
person.put("password", "yyy");
// 如果返回POJO将自动转成Map
Object result = genericService.$invoke("findPerson", new String[]
{"com.xxx.Person"}, new Object[]{person});

...

泛化的实现

通过 API 方式暴露泛化实现

...
// 用org.apache.dubbo.rpc.service.GenericService可以替代所有接口实现
GenericService xxxService = new XxxGenericService();

// 该实例很重量,里面封装了所有与注册中心及服务提供方连接,请缓存
ServiceConfig service = new ServiceConfig();
// 弱类型接口名
service.setInterface("com.xxx.XxxService");
service.setVersion("1.0.0");
// 指向一个通用服务实现
service.setRef(xxxService);

// 暴露及注册服务
service.export();

注册到ZK实现

public static void main(String[] args) {        ReferenceConfig reference = new ReferenceConfig();        // 当前dubbo consumer的application配置,不设置会直接抛异常        ApplicationConfig applicationConfig = new ApplicationConfig();        applicationConfig.setName("xxx_test_service");        // 注册中心配置        RegistryConfig registryConfig = new RegistryConfig();        // 注册中心这里需要配置上注册中心协议,例如下面的zookeeper        registryConfig.setAddress("zookeeper://127.0.0.1:2181");        registryConfig.setGroup("test_group");        reference.setApplication(applicationConfig);        reference.setRegistry(registryConfig);        // 设置调用的reference属性,下面只设置了协议、接口名、版本、超时时间        reference.setProtocol("dubbo");        //约定接口        reference.setInterface("com.xxx.test.TestService");        reference.setVersion("1.0.0");        reference.setTimeout(1000);        // 声明为泛化接口        reference.setGeneric(true);        // GenericService可以接住所有的实现        GenericService genericService = reference.get();        // 构造复杂参数,下面的示例中,头两个参数为string类型,后一个是一个复杂类型,但都可以通过map构造。        Map param = new HashMap<>();        param.put("test1", "a");        param.put("test2", "b");        Map thirdParam = new HashMap<>();        thirdParam.put("class","java.util.Map");        thirdParam.put("subParam1","c");        thirdParam.put("subParam2","d");        param.put("test3",thirdParam);        Object result = genericService.$invoke("myMethod", new String[]{"java.lang.String", "java.lang.String", "com.xxxtest.MyParam"}, new Object[]{"123", "ddd",param});        System.out.println(JSON.toJSONString(result));    }

到此,关于"如何通过API方式使用dubbo泛化调用"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

接口 服务 方式 参数 类型 学习 配置 供方 约定 复杂 场景 实例 更多 框架 缓存 重量 面的 封装 帮助 实用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 咖啡网 互联网科技公司排名 百单网互联网科技有限公司怎么样 美国互联网保险保险科技 互联网科技社 唐信互联网科技 融贸通互联网科技 上海卓越科技 互联网 宁波青枫互联网科技有限公司 互联网科技有哪些公司 南平创想时代互联网科技有限公司 荆州市昕露互联网络科技有限公司 知域互联网科技有限公司大骗子 开一家科技互联网公司需要多少钱 北京市互联网新科技 广州有谷有贝互联网科技有限公司 东营紫格互联网科技 萌小萌互联网科技河南有限公司 北京瑞云互联网科技有限公司 颐高云石互联网科技 蓝思科技飞鸽互联网 互联网金融与金融科技 善班互联网科技有限公司 无线互联网科技 长亮科技 互联网金融 互联网科技产品 湖南诚度互联网科技有限公司 富国互联网金融科技混合基金 互联网科技融合创新 银川新华互联网科技学校是国营吗
0