您好,登錄后才能下訂單哦!
這篇文章主要講解了“什么是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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。