千家信息网

什么是seata协议

发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,这篇文章主要讲解了"什么是seata协议",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"什么是seata协议"吧!代码入口io.seata.core.r
千家信息网最后更新 2025年01月24日什么是seata协议

这篇文章主要讲解了"什么是seata协议",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"什么是seata协议"吧!

代码入口

io.seata.core.rpc.netty.NettyClientBootstrap#start

bootstrap.handler(            new ChannelInitializer() {                @Override                public void initChannel(SocketChannel ch) {                    ChannelPipeline pipeline = ch.pipeline();                    pipeline.addLast(                        new IdleStateHandler(nettyClientConfig.getChannelMaxReadIdleSeconds(),                            nettyClientConfig.getChannelMaxWriteIdleSeconds(),                            nettyClientConfig.getChannelMaxAllIdleSeconds()))                        .addLast(new ProtocolV1Decoder())                        .addLast(new ProtocolV1Encoder());                    if (channelHandlers != null) {                        addChannelPipelineLast(ch, channelHandlers);                    }                }            });

io.seata.core.rpc.netty.v1.ProtocolV1Encoder#encode

io.seata.core.protocol.RpcMessage

协议规则

2个字节的模数([-38,-38])| 1个字节的版本号 | 6个字节的长度 | 1个字节的messageType | 一个字节的codec值| 一个字节的compressor | 4个字节的messagId值 | header数据值(2个字节的key长度 | value数据值) | 业务数据值

codec: 序列化类型:如 seata,kryo;protobuf;fst

compressor: 压缩类型:如 NONE ,GZIP,BZIP2,LZ4

6个字节的长度:

4个字节(全部数据的长度): 默认长度16+headLength+bodyLength

2个字节的(headLength),默认长度16

业务数据序列化

io.seata.serializer.seata.SeataSerializer#serialize

2个字节(typecode的值)| body

typecode: 消息类型序编码器 如(RegisterTMRequestCodec,BranchRollbackRequestCodec)

body:

2个字节(xid的长度)| xid的数据| 8个字节(branchId值)| 一个byte(分支事务类型ordinal值)|2个字节(ResourceId的长度)| ResourceId的值|4个字节(applicationData的长度)| applicationData的值|

事务类型: AT,TCC,XA,SAGA

感谢各位的阅读,以上就是"什么是seata协议"的内容了,经过本文的学习后,相信大家对什么是seata协议这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

0