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

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

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


http://www.kler.cn/a/416991.html

相关文章:

  • Express 路由
  • keepalived+timescaladb主备切换高可用方案
  • Lua限流器的3种写法
  • AWS Savings Plans 监控与分析工具使用指南
  • Python——批量图片转PDF(GUI版本)
  • apache-poi导出excel数据
  • Windows pc端桌面便签哪个好用?桌面简洁好用的便签软件推荐
  • `console.log`调试完全指南
  • deepin 安装 chrome 浏览器
  • 【Java基础入门篇】三、面向对象和JVM底层分析(2)
  • Artec Leo:航海设备维护的便携式3D扫描利器【沪敖3D】
  • Qt入门5——常用控件3
  • 六通道串口服务器
  • Unity XR Interaction Toolkit 开发教程:抓取交互【3.0以上版本】
  • 无人机的起降装置:探索起飞和降落的秘密 !
  • JS +CSS @keyframes fadeInUp 来定义载入动画
  • 【C语言】连接陷阱探秘(5):头文件
  • 在远程服务器和本地同步数据的指南
  • Java基于SSM框架的跑腿平台小程序【附源码、文档】
  • 【多线程-第一天-NSThread-线程的属性-线程的名称-线程的优先级 Objective-C语言】
  • LLM学习笔记(11)pipeline() 函数的幕后工作
  • 【娱乐项目】基于批处理脚本与JavaScript渲染视频列表的Web页面
  • MySQL 中 COUNT(1)、COUNT(*) 和 COUNT(列名) 的区别
  • Spring Boot 项目——分层架构
  • C++设计模式:装饰器模式 (Decorator) (咖啡订单系统)
  • c++哈希(开散列原理及实现)