应用场景
统一的测试平台
让各个业务方在测试平台中通过输入接口、 分组名、方法名以及参数值,在线测试自己发布的 RPC 服务。
轻量级的服务网关
让各个业务方用HTTP的方式,通过服务网关调用其它服务
如何做
所谓的 RPC 调用,本质上就是调用端向服务端发送一条请求消息,服务端接收并处理,之 后向调用端发送一条响应消息,调用端处理完响应消息之后,一次 RPC 调用就完成了。
只要调用端将服务端需要知道的信息,如接口名、业务分组名、方法名以及参数信息
等封装成请求消息发送给服务端,服务端就能够解析并处理这条请求消息,这样问题就解决
了
可以定义一个统一的接口GenericService,调用端在创建GenericService代理时需要制定调用接口的接口名、分组名,GenericService接口的invoke方法的入参就是方法名以及参数信息。如下
class GenericService {
Object $invoke(String methodName, String[] paramTypes, Object[] params);
}
通过统一的 GenericService 接口类生成的动态代理,来实现在没有接口的情况下进行 RPC 调用的功能,我们就称之为泛化调用。
如何进行序列化呢
- 为泛化调用提供专属的序列化插件,通过这个插件,解决泛化调用中的序列化与反序列化
问题 - 可以使用 Map 类型的对象,之后通过泛化调用专属的序列化方式对这个 Map 对象进行序列化,服务端收到消息后,再通过泛化调用专属的序列化方式将其反序列 成对象。