Dubbo泛化调用
1. 场景
场景一:我们要搭建一个统一的测试平台,可以让各个业务方在测试平台中通过输入接口、分组名、方法名以及参数值,在线测试自己发布的 RPC 服务。这时我们就有一个问题要解决,我们搭建统一的测试平台实际上是作为各个 RPC 服务的调用端,而在 RPC 框架的使用中,调用端是需要依赖服务提供方提供的接口 API 的,而统一测试平台不可能依赖所有服务提供方的接口 API。我们不能因为每有一个新的服务发布,就去修改平台的代码以及重新上线。这时我们就需要让调用端在没有服务提供方提供接口的情况下,仍然可以正常地发起 RPC 调用。
场景二:我们要搭建一个轻量级的服务网关,可以让各个业务方用 HTTP 的方式,通过服务网关调用其它服务。这时就有与场景一相同的问题,服务网关要作为所有 RPC 服务的调用端,是不能依赖所有服务提供方的接口 API 的,也需要调用端在没有服务提供方提供接口的情况下,仍然可以正常地发起 RPC 调用。
这两个场景都是我们经常会碰到的,而让调用端在没有服务提供方提供接口 API 的情况下仍然可以发起 RPC 调用的功能,在 RPC 框架中也是非常有价值的。
因为作为一个测试平台或者是网关,不可能因为一个Dubbo服务上线了,就要更新相应的二方包依赖。
2. 测试一下
定义一个接口
####定义一个实现类
通过dubbo-provider.xml暴露接口
provider整体结构
通过dubbo-consumer.xml引用接口
在consumer/Application中引入泛型类
3. 泛化引用源码分析
泛化引用原理图:
服务消费者 GenericImplFilter:
服务提供者 GenericFilter:
4. 鸣谢
如何在没有接口的情况下进行RPC调用
泛化引用