Dubbo泛化调用!
发表于更新于
中间件DubboDubbo泛化调用!
月伴飞鱼
一般情况下我们通过RPC
调用接口提供方的服务,首先在消费端嵌入提供方的Jar
包,从而使用Jar
包中的类和方法。
在通用的API
网关系统中,考虑到扩展性和维护成本,不会使用服务提供方客户端的JAR
包,而是通过泛化调用。
其中的原理跟普通的RPC
调用时一致的,网络
、序列化
、反射
这些底层的技术原理一致。
任何一个成熟的RPC
框架都会支持泛化调用,比如Dubbo
提供的泛化。
泛化接口调用方式主要用于客户端没有API
接口的情况,参数及返回值中的所有入参出参均用Map
表示,通常用于框架集成。
可通过 GenericService
调用所有服务实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| import org.apache.dubbo.rpc.service.GenericService; ...
ReferenceConfig<GenericService> reference = new ReferenceConfig<GenericService>();
reference.setInterface("com.xxx.XxxService"); reference.setVersion("1.0.0");
reference.setGeneric(true);
GenericService genericService = reference.get();
Object result = genericService.$invoke("sayHello", new String[] {"java.lang.String"}, new Object[] {"world"});
Map<String, Object> person = new HashMap<String, Object>(); person.put("name", "xxx"); person.put("password", "yyy");
Object result = genericService.$invoke("findPerson", new String[] {"com.xxx.Person"}, new Object[]{person}); ...
|