课程名称:实现RPC框架
课程章节:第1章 理论篇
课程讲师: 司马极客
课程内容:
一、理论篇
1、RPC概念
RPC:
Remote Procedure Call,远程过程调用。
分布式系统常见的一种通信方法,从跨进程到跨物理机已经有几十年的历史。
跨进程交互形式:
RESTfull、WebService、HTTP、基于DB做数据交换、基于MQ做数据交换,以及RPC。
2、图解交互形式
现有框架对比
3、核心原理
整体架构
调用过程
4、技术栈
基础知识:JavaCore、Maven、反射
动态代理(生成Client存根实际调用对象):JAVA自带的动态代理
序列化(JAVA对象与二进制数据互转):
fastjson
序列化:Java对象转为二进制数组
反序列化:二进制数组转为Java对象
多络通信(传输序列化后的数据):jetty、URLConnection
二、实战篇
1、类图
五个模块:协议模块、Server模块、Client模块、序列化模块、网络模块
《图片》
2、创建工程
rpc-client,Client模块;
rpc-codec,序列化模块;
rpc-common,公用方法模块;
rpc-proto,server与client间协议定义所属模块;
rpc-server,对service进行管理;
rpc-transport,网络通信模块;
3、pom依赖设置&lombok配置
引入依赖及工程编译的版本
定义依赖的版本
lombok插件安装
4、各模块定义类
1)server至client的协议类
定义Peer类,表示网络传输的一个端点,两个变量:hosts、port;
定义ServiceDescriptor类,表示服务,四个变量:clazz、method、returnType、parameterTypes;
定义Request类,表示RPC的一个请求,两个变量:ServiceDescriptor类对象service、Object数组parameters;
定义Response类,表示RPC的返回,三个变量:服务返回编码code、具体的错误信息message、返回的数据data;
2)反射工具类
定义ReflectionUtils类,包含三个方法,
newInstance根据class创建对象、getPublicMethods获取某个class的共有方法、invoke调用指定对象的指定方法
3)序列化模块
定义Encoder序列化、Decoder反序列化接口,基于json的序列化、反序列化的实现JSONEncoder、JSONDecoder
继续进行网络模块实现client、server
实现server模块、client模块
5、案例验证
server启动
client调用
课程收获:
对RPC的调用过程有了初步的认识,不过对于各种跨进程的调用形式间的差异仍不太清楚,还需继续学习了解。