RocketMQ源码:通信协议设计及编解码
本文主要分析RocketMQ通信协议的设计。RocketMQ设计了自己的一个通信协议,用于消息内容和二进制格式之间的转换。
RocketMQ的版本为:4.2.0 release。
一.通信协议的格式
1.length:4字节整数,二三四部分长度总和;
2.header length:4字节整数,第三部分header data长度;
3.header data:存放Json序列化的数据;
4.body data:应用自定义二进制序列化的数据。
二.消息的编码过程
消息的编码是在 RemotingCommand 中 encode 方法中完成的:
对于头部数据 - header data 的编码,在 RemotingCommand 中 headerEncode 方法处理:
还有一个细节的地方,保存 header length 的时候,经过了一个 markProtocolType 的处理,作用是将RPC类型和headerData长度编码放到一个byte[4]数组中:
记住这个方法,后面从消息数据解码消息头长度的时候,就不会看的很迷茫。
三.消息的解码过程
消息的解码是在类 RemotingCommand 中 decode方法中完成的:
对于头部数据 - header data 的解码,在 RemotingCommand 中 headerDecode 方法处理:
解码出 header length - 消息头长度,在 getHeaderLength 中:
通过代码分析,发现RocketMQ的协议设计不是很复杂,只要我们耐心一步步跟进去,看到最里面的代码。"哦,原来是这样!"
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【长期更新】迈向现代化的 .Net 配置指北
1. 欢呼 .NET Standard 时代 我现在已不大提 .Net Core,对于我来说,未来的开发将是基于 .NET Standard,不仅仅是 面向未来 ,也是 面向过去;不只是 .Net Core 可以享受便利, .NET Framework 不升级一样能享受 .NET Standard 带来的好处。(目前 .NET Standard 支持 .NET Framework 4.6.1+) 2. 传统配置的不足 在我刚步足 .Net 的世界时,曾经有过一个 困惑,是不是所有的配置都必须写在 Web.Config 中?而直到开始学习 .Net Core 的配置模式,才意识到传统配置的不足: 除了 XML ,我们可能还需要更多的配置来源支持,比如 Json 配置是否可以直接序列化成对象或者多种类型(直接取出来就是 int),而不只是 string 修改配置后,IIS 就重启了,是否有办法不重启就能修改配置 微服务(或者说分布式)应用下管理配置带来的困难 很显然微软也意识到这些问题,并且设计出了一个强大并且客制化的配置方式,但是这也意味着从 AppSettings 中取出配置的时代也一...
- 下一篇
朱晔的互联网架构实践心得S1E1:Pilot
朱晔的互联网架构实践心得S1E1:Pilot 最近几年写博客确实写得少了,初出茅庐的时候什么都愿意去写,现在写一点东西之前会反复斟酌是否有价值。工作十几年了,做了N多个互联网系统,业务涉及教育、游戏、电商、O2O、P2P,算是各种类型的互联网系统都摸过,多少有一些心得,架构方面的文章网上很多很多,有些是说一些方法论,有些是说一些具体的案例,感觉自己想分享的东西和别人已分享的是有点不同的,还是应该留下点什么。在这里我更多想分享一下搭建一套完整的互联网系统架构方面一些具体的实践心得,大概会从这几个方面来写: 各种废话的闲聊和吐槽 屡试不爽的架构三马车:介绍一个简单实用的可扩展的互联网架构 相辅相成的存储五件套:介绍一下个人比较喜欢的一个存储组合以及适用场景 简单好用的监控六兄弟:介绍监控方面一直在用的一些工具以及强调监控的重要性 不断耕耘的基础中间件:中后期的项目需要有完善的基础中间件,这里进行逐一介绍 给飞机换引擎和安全意识十原则:分享一些对高速发展项目进行重构以及安全方面的一些经验 高并发架构到底是什么:高并发架构优化在优化哪些方面,具体会做一些什么事呢? ……(想到了再补充吧) ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Redis,开启缓存,提高访问速度
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作