欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > 泛化调用 :在没有接口的情况下进行RPC调用

泛化调用 :在没有接口的情况下进行RPC调用

2025/6/25 17:06:34 来源:https://blog.csdn.net/qq_43417581/article/details/144160150  浏览:    关键词:泛化调用 :在没有接口的情况下进行RPC调用

什么是泛化调用?

在RPC调用的过程中,调用端向服务端发起请求,首先要通过动态代理动态代理可以屏蔽RPC处理流程,使得发起远程调用就像调用本地一样。

RPC调用本质:调用端向服务端发送一条请求消息,服务端接收并处理,之后向调用端发送一条响应消息,调用端处理完响应消息之后,一次RPC调用就完成了。

只要调用端将服务端需要知道的信息,如接口名、业务分组名、方法名以及参数信息等封装成请求消息发送给服务端,服务端就能够解析并处理这条请求消息,就能够实现接口调用。

image-20241130201404154

定义一个统一的接口(GenericService),调用端在创建GenericService代理时指定真正需要调用的接口的接口名以及分组名,而GenericService接口的$invoke方法的入参就是方法名以及参数信息。

传递给服务端所需要的所有信息,包括接口名、业务分组名、方法名以及参数信息等都可以通过调用GenericService代理的$invoke方法来传递。

RPC框架可以通过异步的方式提升吞吐量,给GenericService接口再添加一个异步方法$asyncInvoke,方法的返回值就是CompletableFuture:

class GenericService {Object $invoke(String methodName, String[] paramTypes, Object[] params);CompletableFuture<Object> $asyncInvoke(String methodName, String[] paramTypes, Object[] params);}

通过统一的GenericService接口类生成的动态代理,来实现在没有接口的情况下进行RPC调用的功能,就称之为泛化调用

调用端入参与返回值类型?

在服务提供方提供的接口API中,被调用的方法的入参类型是一个对象,那么使用泛化调用功能的调用端使用Map类型的对象,之后通过泛化调用专属的序列化方式对这个Map对象进行序列化,服务端收到消息后,再通过泛化调用专属的序列化方式将其反序列成对象。

实现原理

RPC框架提供统一的泛化调用接口(GenericService),调用端在创建GenericService代理时指定真正需要调用的接口的接口名以及分组名,通过调用GenericService代理的$invoke方法将服务端所需要的所有信息,包括接口名、业务分组名、方法名以及参数信息等封装成请求消息,发送给服务端,实现在没有接口的情况下进行RPC调用的功能。【动态代理】

为泛化调用提供专属的序列化插件,解决泛化调用中的序列化与反序列化问题。

泛化调用两种方式

RPC框架实现泛化调用功能主要有两种方式:基于Java Bean规范的泛化调用和基于序列化中间体的泛化调用。

基于Java Bean规范的泛化调用

优点:与序列化无关,因此具有较好的通用性。
缺点:实现较为复杂,RPC框架需要处理JavaBeanDescriptor向POJO的转换功能。如dubbo支持该种类型的泛化调用,在使用泛化调用时,直接传递JavaBeanDescriptor对象作为参数。
在这里插入图片描述

基于序列化中间体的泛化调用

优点:RPC框架实现相对简单,如果序列化框架原生支持或者仅需少量改造即可实现泛化调用。
缺点:与特定的序列化框架耦合,如sofa-rpc使用的sofa-hessian序列化框架,它在hessian序列化框架基础上进行二次开发,抽象出了序列化中间体如GenericObject、GenericMap、GenericArray等。
在这里插入图片描述

泛化调用在网关、测试平台等领域应用广泛,具体选择哪种泛化调用实现方式,还需要结合实际情况做出选择。

参考文档

Dubbo泛化调用,看这篇就够了!
RPC框架泛化调用原理及转转的实践

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词