当前位置: 首页 > news >正文

泛化调用 :在没有接口的情况下进行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调用的功能。

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

Dubbo泛化调用示例

Dubbo泛化调用,看这篇就够了!

http://www.lryc.cn/news/495401.html

相关文章:

  • Java 泛型详细解析
  • 题解:CF332B Maximum Absurdity
  • Vue 集成和使用 SQLite 的完整指东
  • 【JVM什么时候触发YoungGC和FullGC】
  • ubuntu配置网络
  • 第十一课 Unity编辑器创建的资源优化_预制体和材质篇(Prefabs和Materials)详解
  • 2024.11.29(单链表)
  • 基于深度学习和卷积神经网络的乳腺癌影像自动化诊断系统(PyQt5界面+数据集+训练代码)
  • opengl 三角形
  • 23种设计模式-抽象工厂(Abstract Factory)设计模式
  • 手机上怎么拍证件照,操作简单且尺寸颜色标准的方法
  • IDEA报错: java: JPS incremental annotation processing is disabled 解决
  • OCR实现微信截图改名
  • 第一届“吾杯”网络安全技能大赛 Writeup
  • 再谈Java中的String类型是否相同的判断方法
  • <一>51单片机环境
  • 【0x0001】HCI_Set_Event_Mask详解
  • 第三方Express 路由和路由中间件
  • 七、Python —— 元组、集合和字典
  • Aes加解密
  • 【时时三省】Tessy 故障入侵 使用教程
  • .NET 9 AOT的突破 - 支持老旧Win7与XP环境
  • CondaValueError: Malformed version string ‘~‘: invalid character(s).
  • 01-Ubuntu24.04LTS上安装PGSQL
  • Esp32使用micropython基于espnow实现语音对讲机
  • Docker 容器隔离关键技术:SELinux
  • Java并发07之ThreadLocal
  • 【单细胞数据库】癌症单细胞数据库CancerSEA
  • Rsa加解密 + 签名验签
  • bugku-web-留言板1