基于Netty实现简化的RPC

本文介绍了基于Netty实现简化的RPC过程,包括服务端和客户端的代码实践。RPC架构包含Register、Server和服务消费者三部分。服务端Handler解析RPC请求并调用相应方法。客户端通过单例模式获取channel,使用代理模式封装请求。在处理过程中,利用Promise解决线程间通信,用全局id作为消息序列号。在实践中遇到了堆栈溢出等问题。
摘要由CSDN通过智能技术生成

一些理论

  • 当你的项目太大,业务越来越多的时候,需要将服务拆分,RPC就可以用于服务于服务之间的调用问题。系统中的内部服务之间的调用用RPC。

  • RPC的架构主要包括三个部分:

  1. Register注册中心:将本地服务发布成远程服务,管理远程服务,提供给服务消费者使用。
  2. Server服务提供者:提供服务接口的定义和实现类。
  3. Client服务消费者:通过远程代理对象调用远程服务。
  • RPC就是将以下这些步骤封装起来,使得客户端能够像调用本地服务一样调用远程的服务。
  1. 接收调用
  2. 将方法参数等封装成能够进行网络传输的消息体序列化后发送到服务端
  3. 将服务端处理的结果反序列化后返回给客户端。

实践

服务端代码
  1. 服务端在Handler部分根据传过来的RPC请求体进行解析,调用相应的方法,返回RPC相应消息体。
  2. 上一步的解析部分通过Spring的反射获取类名和方法名。
RPC请求消息体和RPC响应消息体
  1. 调用的接口全限定名
  2. 调用接口中的方法名
  3. 方法返回类型
  4. 方法参数类型数组
  5. 方法参数值数组
/**
 * RPC请求体
 */
@Data
public class RpcRequestMessage extends Message{

    //调用的接口全限定名
    private String className;

    //调用接口中的方法名
    private String methodName;

    //方法返回类型
    private Class<?> returnType;

    //方法参数类型数组
    private Class[] parameterTypes;

    //方法参数值数组
    private Object[] parameters;

    public RpcRequestMessage(int sequenceId, String className, String methodName, Class<?> returnType, Class[] parameterTypes, Object[] parameters
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值