如何通过API方式使用dubbo泛化调用
发表于:2025-12-04 作者:千家信息网编辑
千家信息网最后更新 2025年12月04日,这篇文章主要介绍"如何通过API方式使用dubbo泛化调用",在日常操作中,相信很多人在如何通过API方式使用dubbo泛化调用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
千家信息网最后更新 2025年12月04日如何通过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安全错误
数据库的锁怎样保障安全
acs数据库账号
两会期间网络安全形势
水利网络安全检查情况报告
软件开发合同的法律问题
通信中的网络安全
快充软件开发
网络安全理论赛
服务器机柜租赁
宾馆落实网络安全审计依据
北京对日软件开发工资
数据库缩写名词
南京网络软件开发商家
数据库10g安装黑框没了
上海软件开发怎么收费
怎么办网络安全
做证软件开发
南通卓睿智聘网络技术有限公司
私自开服务器
数据库三个表查询带查询条件
预制构件模板软件开发
数据库如何取证
应急数据库技术
服务器机柜租赁
网络安全中心热线电话
hive打开数据库的命令是
软件开发项目成本有
合肥的国企软件开发待遇
php无法连接到数据库
工商联数据库总结
数据库管理员转行