上一章,我们讲到了Dubbo的线程池策略,本章我们一起探讨,Dubbo如何实现泛化调用的。主要内容包括:
1、什么是泛化调用
2、泛化调用的三种方式
3、如何使用
4、源码分析
推荐阅读:
什么是泛化调用
我们基于Dubbo API搭建Dubbo服务时,服务消费端需要依赖于一个SDK二方包,其中存放这服务提供端提供的所有接口。
泛化调用主要用于,服务提供端没有API接口以及入参出参,参数和返回没有对应的POJO时,所有POJO参数均用Map表示,通常用于框架集成。使用泛化调用时,服务消费端不再需要依赖于二方的SDK。
泛化调用的三种方式
在Dubbo中,有三种泛化调用,分别是:generic=true,generic=bean和generic=nativejava,三种调用方式,使用的序列化和反序列化的方式不同。
如何使用
下面,用generic=true的方式,演示一下泛化调用怎么用。
Spring的XML配置:
<dubbo:reference id="userService" interface="com.ctx.userService" generic="true" />
在代码里,可以这样获取userService并泛化调用
// 引用远程服务
// 该实例很重量,里面封装了所有与注册中心及服务提供方连接,请缓存
ReferenceConfig<GenericService> reference = new ReferenceConfig<GenericService>();
// 弱类型接口名
reference.setInterface("com.ctx.XxxService");
reference.setVersion("1.0.0");
// 声明为泛化接口,方式为true
reference.setGeneric(true);
// 用org.apache.dubbo.rpc.service.GenericService可以替代所有接口引用
GenericService genericService = reference.get();
// 基本类型以及Date,List,Map等