分布式事务SEATA 新旧通信协议结构分析

本文分析 0.6/0.7 协议前后的变化.

背景:为seata多版本通信协议做准备

Seata multi-version protocol control design and discuss · seata/seata · Discussion #5628​github.com/seata/seata/discussions/5628

<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

&gt; 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值