RPC

314 阅读2分钟

RPC(Remote Procedure Call)远程过程调用,简单的理解是一个服务请求另一个服务提供的服务

本地过程调用: 就是在同一个JVM中, 直接调用本地的方法

常见的RPC框架: 

  • RMI(JRMP) 纯Java的RPC框架

  • SOAP(webservice)

  • grpc

  • dubbo

  • Springcloud

image.png

创建一个maven项目

不是springboot哦

image.png

做为父项目

<packaging>pom</packaging>

删除src

创建3个Module 一个rmi-api 一个rmi-server 一个rmi-client

image.png

业务流程

image.png

image.png

image.png

RMI调用时序图

image.png

手写RPC

分布式项目

对于分布式应用项目来说, 相对于单体应用来说,主要有几个特点

  • 1 项目规模比较大, 用户数量比较多, 业务功能比较复杂

  • 2 分布式项目采用模块化开发, 对于开发人员来说, 只需要了解负责的模块即可

  • 3 对于分布式项目部署来说, 采用模块化部署, 万一一个模块出现问题, 并不会直接影响其他模块调用

  • 4 对于分布式项目会引入网络, 也会引入分库分表的操作, 所以系统的复杂性会明显提高 对于分布式项目常用的一般是大型的App, 比如说社交类的App, 旅游类的App, 直播类的App, 在线教育类的App等等

server

image.png

  • 创建一个socket通信
  • 接收不了客户端请求(while循环)
  • 读取 read input流过来的数据
  • 响应数据 发送数据 write 写数据

@PostConstruct 会自动启动

添加构造函数

image.png

以 bean形式 引入

image.png

web client

连接服务器

通过输出流返送数据到服务器 -> 对象输出流

接收服务端数据

Server

  • 通过 rpcRequest 的 className
  • applicationContext 获取bean对象
  • 反射到类方法

整合 把业务 通用逻辑分离

坚持听完吧 内容太多

手写rpc 没跟着敲 容易走神

后面优化 抽离代码

注册中心需要zookeeper配合 资源均衡