dubbo泛化调用
Posted 全力付出
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dubbo泛化调用相关的知识,希望对你有一定的参考价值。
dubbo泛化调用
一、前言
泛接口调用方式主要用于客户端没有API接口及模型类元的情况,参数及返回值中的所有POJO均用Map表示,通常用于框架集成,比如:实现一个通用的服务测试框架,可通过GenericService调用所有服务实现。
二、调用示列
方式一: xml声明dubbo reference
<dubbo:reference id="valueService" interface="cn.pomelo.client.intf.IListValueService" generic="true" />
GenericService barService = (GenericService) applicationContext.getBean("valueService");
// 用Map表示POJO参数,如果返回值为POJO也将自动转成Map
Map<String, Object> cache = new HashMap<>();
cache.put("type", "mobile");
cache.put("value", "18969975142");
// 基本类型以及Date,List,Map等不需要转换,直接调用
Object result = genericService.$invoke("getCache",
new String[] "cn.pomelo.client.pojo.request.ListQueryBean" ,
new Object[] cache );
方式二:xml不声明dubbo reference
@Autowired
private ReferenceConfig<GenericService> referenceConfig;
public Object genericInvoker()
// 引用远程服务
ReferenceConfig<GenericService> reference = new ReferenceConfig<>(); // 该实例很重量,里面封装了所有与注册中心及服务提供方连接,请缓存
reference.setInterface("cn.pomelo.client.intf.IListValueService"); // 弱类型接口名
reference.setVersion("1.0.0");
reference.setGeneric(true); // 声明为泛化接口
reference.setApplication(referenceConfig.getApplication());
reference.setRegistry(referenceConfig.getRegistry());
GenericService genericService = reference.get(); // 用com.alibaba.dubbo.rpc.service.GenericService可以替代所有接口引用
// 用Map表示POJO参数,如果返回值为POJO也将自动转成Map
Map<String, Object> cache = new HashMap<>();
cache.put("type", "mobile");
cache.put("value", "18969975142");
// 基本类型以及Date,List,Map等不需要转换,直接调用
Object result = genericService.$invoke("getCache",
new String[] "cn.pomelo.client.pojo.request.ListQueryBean" ,
new Object[] cache );
return result;
以上是关于dubbo泛化调用的主要内容,如果未能解决你的问题,请参考以下文章