RPC(Remote Procedure Call)远程过程调用,简单的理解是一个服务请求另一个服务提供的服务
本地过程调用: 就是在同一个JVM中, 直接调用本地的方法
常见的RPC框架:
-
RMI(JRMP) 纯Java的RPC框架
-
SOAP(webservice)
-
grpc
-
dubbo
-
Springcloud
创建一个maven项目
不是springboot哦
做为父项目
<packaging>pom</packaging>
删除src
创建3个Module 一个rmi-api 一个rmi-server 一个rmi-client
业务流程
RMI调用时序图
手写RPC
分布式项目
对于分布式应用项目来说, 相对于单体应用来说,主要有几个特点
-
1 项目规模比较大, 用户数量比较多, 业务功能比较复杂
-
2 分布式项目采用模块化开发, 对于开发人员来说, 只需要了解负责的模块即可
-
3 对于分布式项目部署来说, 采用模块化部署, 万一一个模块出现问题, 并不会直接影响其他模块调用
-
4 对于分布式项目会引入网络, 也会引入分库分表的操作, 所以系统的复杂性会明显提高 对于分布式项目常用的一般是大型的App, 比如说社交类的App, 旅游类的App, 直播类的App, 在线教育类的App等等
server
- 创建一个socket通信
- 接收不了客户端请求(while循环)
- 读取 read input流过来的数据
- 响应数据 发送数据 write 写数据
@PostConstruct 会自动启动
添加构造函数
以 bean形式 引入
web client
连接服务器
通过输出流返送数据到服务器 -> 对象输出流
接收服务端数据
Server
- 通过 rpcRequest 的 className
- applicationContext 获取bean对象
- 反射到类方法
整合 把业务 通用逻辑分离
坚持听完吧 内容太多
手写rpc 没跟着敲 容易走神
后面优化 抽离代码
注册中心需要zookeeper配合 资源均衡