这篇文章主要讲解了“什么是seata协议”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“什么是seata协议”吧!
代码入口
io.seata.core.rpc.netty.NettyClientBootstrap#start
bootstrap.handler( new ChannelInitializer<SocketChannel>() { @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协议这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。