手写RPC02:rpc-core模块

一、模块整体功能

提供rpc功能的核心逻辑实现,以及一些工具类的提供

  • 定义消息传输协议: messageProtrol是传输的消息体

  • 负载均衡策略

  • 序列化和反序列化

  • 编码器和解码器

  • RPC异常定义

二、目录层级和功能

  • balancer:负载均衡
    • 随机选择策略
    • 轮询策略

根据策略从服务信息列表中选取一个返回

  • 编码解码
    • 继承netty的ByteToMessage编码解码,实现字节流和消息体的转换
    • 编码过程:根据消息体组成,按顺序进行组装,产生消息体
  • 传输格式
    • MessageProtocol
      • 消息头messageHeader
        • 魔数
        • 报文类型
        • 请求ID
        • 数据长度
        • 协议版本号
        • 序列化算法
      • T data 传输数据
    • ProtocolConstans定义消息格式用到的常量
      • 头部总长:42
      • 魔数:0x00
      • 请求长度:0x32
      • 版本号:0x01
  • common包
    • RpcRequest
      • RPC服务名称
      • 调用方法名称
      • 参数的class对象数组
      • 参数对象数组
    • RpcResponse
      • 调用返回结果
      • 调用返回提示信息
    • ServiceInfo 服务信息封装
      • 服务名称
      • 任务名称
      • 服务调用地址名称
      • 服务地址
      • 端口号 -ServiceUtil:调ServiceKey产生一个服务名前缀
  • Serialization包
    • Json序列化方式
      • 静态转化器ObjectMapper
        • static代码块中创建,传JSONINCLUDE.ALWAYS,对象都会被序列化
        • 序列化方法:调用mapper的writeValueAsString.getBytes获取字节数组
        • 反序列化方法:调用mapper的readValue(Arrays.toString(data),clazz)返回一个反序列化对象
    • Hessian序列化方式
      • HessianSerializerOutput
      • HessianSerializerInput
全部评论
你好,请问这个项目是在哪里学习的呢
点赞 回复 分享
发布于 2022-06-02 01:06

相关推荐

09-22 09:42
门头沟学院 Java
牛客37185681...:马德,我感觉这是我面过最恶心的公司,一面是两个女hr,说什么实习前几个月属于试用期,试用期过了才能转成正式实习生,我***笑了,问待遇就是不说,问能不能接受全栈,沙币公司
如果可以选,你最想去哪家...
点赞 评论 收藏
分享
10-19 14:15
兰州大学 Java
黄花菜豆:咱俩bg很一致啊uu而且我也做过这个仿小红书,感觉有点太深了短期内不好驾驭啊怕被问穿
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务