手写RPC02:rpc-core模块
一、模块整体功能
提供rpc功能的核心逻辑实现,以及一些工具类的提供
-
定义消息传输协议: messageProtrol是传输的消息体
-
负载均衡策略
-
序列化和反序列化
-
编码器和解码器
-
RPC异常定义
二、目录层级和功能
- balancer:负载均衡
- 随机选择策略
- 轮询策略
根据策略从服务信息列表中选取一个返回
- 编码解码
- 继承netty的ByteToMessage编码解码,实现字节流和消息体的转换
- 编码过程:根据消息体组成,按顺序进行组装,产生消息体
- 传输格式
- MessageProtocol
- 消息头messageHeader
- 魔数
- 报文类型
- 请求ID
- 数据长度
- 协议版本号
- 序列化算法
- T data 传输数据
- 消息头messageHeader
- ProtocolConstans定义消息格式用到的常量
- 头部总长:42
- 魔数:0x00
- 请求长度:0x32
- 版本号:0x01
- MessageProtocol
- common包
- RpcRequest
- RPC服务名称
- 调用方法名称
- 参数的class对象数组
- 参数对象数组
- RpcResponse
- 调用返回结果
- 调用返回提示信息
- ServiceInfo 服务信息封装
- 服务名称
- 任务名称
- 服务调用地址名称
- 服务地址
- 端口号 -ServiceUtil:调ServiceKey产生一个服务名前缀
- RpcRequest
- Serialization包
- Json序列化方式
- 静态转化器ObjectMapper
- static代码块中创建,传JSONINCLUDE.ALWAYS,对象都会被序列化
- 序列化方法:调用mapper的writeValueAsString.getBytes获取字节数组
- 反序列化方法:调用mapper的readValue(Arrays.toString(data),clazz)返回一个反序列化对象
- 静态转化器ObjectMapper
- Hessian序列化方式
- HessianSerializerOutput
- HessianSerializerInput
- Json序列化方式