RPC服务调用
- 一、RPC实现原理深入分析
- 1、RPC的定义
- (1)RPC作用
- (2)RPC核心组成
- (3)RPC调用方式
- 二、精简版RPC调用代码实现
- 1、场景
- 2、接口设计
- 3、序列化协议
最近在做调用系统相关的服务,采用主从的方式,主从通信通过RPC的方式实现,所以跟大家分享下RPC相关的知识。
主要从下面的四个方面介绍RPC:
- RPC实现原理深入分析
- 精简版RPC调用代码实现
- RPC服务消费方核心功能设计实现
- RPC服务提供方核心功能设计实现
代码相关的可以参考我的git地址:https://github.com/liufei0820/lf-framework-project
一、RPC实现原理深入分析
1、RPC的定义
RPC(Remote Producer Call):远程过程调用,Remote Producer Call Protocol 他是一个计算机通信协议。它允许像调用本地方法一样调用远程服务。由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。
(1)RPC作用
- 屏蔽组包解包
- 屏蔽数据发送/接收
- 提供开发效率
- 这是业务发展的必然产物
(2)RPC核心组成
- 远程方法对象管理
- 连接管理
- 序列化/反序列化
- 寻址与负载均衡
(3)RPC调用方式
- 同步调用
- 异步调用
二、精简版RPC调用代码实现
1、场景
假设我们现在开发一个用户管理服务,包括用户的增删改查。
- 功能需求:用户信息管理 – CRUD
- 调用方式:TCP长连接同步交互
- 协议:自定义协议
2、接口设计
# 注册
boolean addUser(User user);
# 更新
boolean update(long uid, User user);
# 注销
boolean deleteUser(long uid);
# 查询
User getUser(long uid);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
3、序列化协议
远程调用设计数据的传输,就会涉及组包和解包,需要调用方和服务方约定数据格式 — 序列化协议。
public class RpcProtocol implements Serializable {
public static int CMD_CREATE_USER = 1;
private int version;
private int cmd;
private int magicNum;
private int bodyLen = 0;
private byte[] body;
final public static int HEAD_LEN = 16;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
Client发起用户编辑请求,通过网络传输到Server,Server经过handler处理,然后将结果集返回给client。
详细的代码欢迎查看我的git地址:/liufei0820/lf-framework-project