RPC服务调用

时间:2024-10-22 08:08:11

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