本文分析 0.6/0.7 协议前后的变化.
背景:为seata多版本通信协议做准备
<0.6.1
0.6.1
【2位】0xdada:固定magic-code
【2位】flag:有如下四种取值,表示四大类的报文
- 0x10:FLAG_SEATA_CODEC
- 0x20:FLAG_HEARTBEAT
- 0x40:FLAG_ASYNC
- 0x80:FLAG_REQUEST
【2位】typecode/bodylength:这个就厉害了,有两种含义
- 如果flag是0x10(seata-codec):这几个byte就表示type-code(也就是动作类型,比如rm注册、rm提交、rm回滚等等)
- 如果flag不是0x10:这几个byte就表示body-length
【8位】requestid:long类型的requestid
>0.7.0
> 0.7.0
【2位】magic-code:0xdada,这个和旧版本的一致
【1位】protocal-verson:现在只有1
【4位】full-length:总长度
【2位】head-length:头部长度
【1位】msgtype:消息类型(ProtocolConstants里)
- 0:MSGTYPE_RESQUEST_SYNC
- 1:MSGTYPE_RESPONSE
- 2:MSGTYPE_RESQUEST_ONEWAY
- 3:MSGTYPE_HEARTBEAT_REQUEST
- 4:MSGTYPE_HEARTBEAT_RESPONSE
【1位】serializer/codecType:序列化方式(心跳类型的用不到)SerializerType
- 0x1:SEATA
- 0x2:PROTOBUF
- 0x4:KRYO
- 0x8:FST
- 0x16:HESSIAN
【1位】compress:压缩方式(心跳类型的用不到)CompressorType
- 0:NONE
- 1:GZIP
- 2:ZIP
- 3:SEVENZ
- 4:BZIP2
- 5:LZ4
- 6:DEFLATER
- 7:ZSTD
【4位】requestid:int类型的requestid
【n位】再后面就是head,要读多长取决于head-length