fescar源码分析-RPC消息封装

前言

在之前的两篇文章中
fescar源码分析-AbstractRpcRemotingClient补充
fescar源码分析-AbstractRpcRemotingServer
可以了解到,fescar在基于Netty实现RPC客户端及服务端时,都会在pipline中配置一个MessageCodecHandler
MessageCodecHandler继承于ByteToMessageCodec类,实现了对出入站的数据进行编解码操作的进一步封装:

  • 实现解码操作(decode),将入站中的ByteBuf类型的数据转换为RpcMessage类型的数据。

    Figure%207

  • 实现编码操作(encode),将出站中的RpcMessage类型的数据转换为ByteBuf类型的数据。

    Figure%207

其中RpcMessage对象是fescar定义的RPC调用的统一数据结构。

image.png

*id 是一个消息的序列号。

  • isAsync 表示是否为异步请求。
  • isRequest 表示是否为请求消息(还有可能是请求的返回消息。)
  • isHeartbeat 表示是否为心跳消息。
  • body 消息的主要内容,可以转换为MessageCodec接口类型的数据。
    MessageCodec接口的定义如下:
public interface MessageCodec {
    short getTypeCode();//消息类型
    byte[] encode(); //将POJO对象转换为字节数组
    boolean decode(ByteBuf in);//将ByteBuf中的字节数组转换为POJO对象
}

通过下图可以看到fescar封装有哪些消息类型数据:


image.png

其中消息类型的关键字可以与如下示意图中的关键字相对应。

image.png

你可能感兴趣的:(fescar源码分析-RPC消息封装)