首页>参考读物>计算机科学与技术>软件与程序设计

RocketMQ技术内幕:RocketMQ架构设计与实现原理
作者 : 丁威 周继锋 著
出版日期 : 2018-11-30
ISBN : 978-7-111-61421-0
定价 : 69.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 297
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

内容简介
本书由RocketMQ社区早期的布道者和技术专家撰写,Apache RocketMQ创始人/Linux OpenMessaging创始人兼主席/Alibaba Messaging开源技术负责人冯嘉的高度评价并作序推荐。
源码角度,本书对RocketMQ的核心技术架构,以及消息发送、消息存储、消息消费、消息过滤、顺序消息、主从同步(HA)、事务消息等主要功能模块的实现原理进行了深入分析,同时展示了源码阅读的相关技巧;应用层面,本书总结了大量RocketMQ的使用技巧。通过本书,读者将深入理解消息中间件和底层网络通讯机制的核心知识点。
全书共10章,分三个部分:
第一部分 准备篇(第1章)
首先介绍了RocketMQ源代码的获取、结构和调试,然后介绍了RocketMQ的设计理念和目标。
第二部分 实现篇(第2~8章)
这是本书的核心部分,从源代码的角度详细分析了消息发送、消息存储、消息消费、消息过滤、顺序消息、主从同步(HA)、事务消息等主要功能模块的架构设计和实现原理。
第三部分 实例篇(第9-10章)
通过示例展示RocketMQ的使用技巧,并着重讲解了RocketMQ的监控命令与监控管理界面。

图书特色

RocketMQ社区布道师和技术专家撰写
RocketMQ创始人
Alibaba Messaging开源技术负责人
Linux OpenMessaging创始人
作序推荐

图书前言

为什么要写这本书
随着互联网技术蓬勃发展,微服务架构思想的兴起,系统架构开始追求小型化、轻量化,原有的大型集中式的IT系统通常需要进行垂直拆分,孵化出颗粒度更小的众多小型系统,因此对系统间松耦合的要求越来越高,目前RPC、服务治理、消息中间件几乎成为互联网架构的标配。
引入消息中间件,服务之间可以通过可靠的异步调用,降低系统之间的耦合度,提高系统的可用性。消息中间件的另一个重要应用场景是解决系统之间数据的一致性(最终一致性)。
RocketMQ作为阿里开源的一款高性能、高吞吐量的消息中间件,承载了阿里“双11”大部分业务,可以说是一名久经战场的“精英”、值得信任的“伙伴”。同时它的开发语言为Java,自然而然地得到了广大互联网架构师们的青睐,成为互联网行业首选的消息中间件。
初次接触RocketMQ是在听到阿里巴巴正式将RocketMQ捐献给Apache基金会,成为Apache的顶级开源项目时,这意味着承载阿里“双11”巨大流量的消息中间件完全走向开源,对广大Java开发者来说无疑是一个巨大的利好,让我们有机会一睹高性能消息中间件RocketMQ的“真容”。作为一名阿里技术崇拜者,我内心异常激动,于是不假思索地在CSDN上开通了专栏“源码研究RocketMQ”,受到了广大技术朋友的支持。
RocketMQ作为一款高性能消息中间件,其核心优势是可靠的消息存储、消息发送的高性能与低延迟、强大的消息堆积能力与消息处理能力、严格的顺序消息模式等。RocketMQ的另一个核心思想是懂得取舍。软件设计不可能做到面面俱到,消息中间件的理想状态是一条消息能且只能被消费一次,但要做到这一点,必然需要牺牲性能。RocketMQ的设计者解决这一难题的办法是不去解决,即保证消息至少被消费一次,但不承诺消息不会被消费者多次消费,其消费的幂等由消费者实现,从而极大地简化了其实现内核,提高了RocketMQ的整体性能。
自从RocketMQ被捐献给Apache基金会后便在快速发展,RocketMQ的设计者们正在制定消息中间件的新规范,其模块为openmessaging。本书主要是抛砖引玉,与各位读者朋友们探讨RocketMQ的实现原理,使读者能更好地在实际项目中应用RocketMQ。
读者对象
RocketMQ用户和爱好者
RocketMQ代码开发志愿者
Java中高级开发工程师
Java架构师
有志于从事Java开源的相关技术从业者
本书特色
本书从源码的角度对RocketMQ的实现原理进行详细剖析,从中阐述了作者学习阅读源码的方法。本书作为一本源码阅读类书籍,其讲解切入点并不是以组成RocketMQ的一个个源码包进行展开,而是基于功能模块(如Topic路由中心、消息发送、消息存储、消息消费、事务消息)来展开,更加贴近实战需求。
如何阅读本书
本书分为三大部分。
第一部分为准备篇(第1章),简单介绍了RocketMQ的设计理念与目标,并介绍了在开发工具中如何对RocketMQ进行代码调试。
第二部分为实现篇(第2~8章),重点讲解了RocketMQ各个功能模块的实现原理,包括NameServer、消息发送、消息存储、消息消费、消息过滤、顺序消息、事务消息等。
第三部分为实例篇(第9章),通过示例展示RocketMQ的使用技巧,着重讲解了RocketMQ的监控命令与监控管理界面。
本书在最后的附录中给出了RocketMQ的主要参数列表及含义,供读者参考。
本书的行文思路主要是根据消息发送的全流程进行展开,从路由管理到消息发送、消息存储、消息消费,再到顺序消息、事务消息,从而实现消息链路的闭环。建议读者按照该思路,带着问题来阅读本书,或许会事半功倍。
勘误和支持
除封面署名外,参加本书编写工作的还有陈鹏飞。由于水平有限,编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。为此,大家可以通过CSDN博客专栏(https://blog.csdn.net/column/details/20603.html)留言反馈。书中的全部源文件可以从github rocketmq官方仓库中下载,我也会将相应的功能及时更新。如果你有更多的宝贵意见,也欢迎发送邮件至dw19871218pmz@126.com,期待能够得到你的真挚反馈。
致谢
首先要感谢MyCAT开源社区负责人周继锋对我的提携与指导,为我的职业发展指明前进的方向。
感谢RocketMQ联盟中每一位充满创意和活力的朋友——奔腾、zenk、共产国际史派克、水动力皮划艇、张登、张凤凰、曾文、季永超,以及名单之外的很多朋友,感谢你们对我的支持与帮助。感谢杨福川老师的引荐,是你的努力才促成了本书的成功出版。
感谢机械工业出版社华章分社的编辑张锡鹏,在这一年多的时间中始终支持我的写作,你的鼓励和帮助引导我能顺利完成全部书稿。
最后感谢我的爸爸、妈妈、爷爷、奶奶,感谢你们将我培养成人,并时时刻刻为我灌输着信心和力量!感谢我的老婆、女儿,你们是我持续努力的最大动力。
谨以此书献给我最亲爱的家人,以及众多热爱RocketMQ的朋友们!
丁威
感谢RocketMQ团队,是你们的付出才有这么好的产品,同时感谢杨福川编辑对本书出版工作的支持。
谨以此书献给我最亲爱的家人和同事,以及帮助过、关注过我的人,以及使用、学习过RocketMQ的朋友们!
周继锋

上架指导

计算机\程序设计

封底文字

分布式消息中间件已成为Cloud Native时代的必备基础组件,本书从源码层面对RocketMQ进行了深度解析,娓娓道来,读后对在实际生产中的应用会更具掌控性,对个人技术水平的提升也会大有裨益。
— 华为云中间件架构师 曹宗南

RocketMQ是Java领域非常优秀的开源项目,每一个Java开发者想深入学习Java高级编程都值得深入学习它的源码。项目依托分布式队列的应用场景,是结合网络通信、IO处理、分布式存储等技术在Java领域的最佳实践。本书的作者有丰富的Java开发经验和多年的技术博客编写经验,作者站在工程师视角,用细腻的文笔把RocketMQ的使用与特性写得简单而又深刻,跟着作者的思路把RocketMQ的架构设计以及重要特性梳理清楚,再对着源码学习,事半功倍。
— 阿里巴巴资深中间件工程师 黄益明

随着大数据、云计算、社交网络、物联网等技术不断融入我们的生活,我们需要具有高性能、高可用、分布式、支持容错、支持事务的中间件来支持互联网的高速发展,经历过无数淘宝“双11”的中间件产品RocketMQ应运而生,本书将揭开RocketMQ高性能底层支持的神秘面纱。本书将从整体架构、底层存储设计、源码分析等综合方面来剖析RocketMQ,读完本书会让读者对架构设计及枯燥的源码分析有新的认识和体会。
— 原德邦平台架构师兼技术框架负责人 张登

消息中间件在项目中的使用越来越广泛,RocketMQ更是其中的佼佼者——它性能表现优秀、生产稳定,并具备其他消息中间件所不具备的特性。本书理论与实践并重,让读者能通过利用本书投入项目生产的同时,还能通晓其原理。不仅如此,本书契合官方文档,是对官方文档极佳的完善与深入解读,强烈推荐!
— 《Spring Cloud与Docker微服务架构实战》作者 周立

作者简介

丁威 周继锋 著:作者简介
丁威
Java、分布式服务架构、中间件等多个领域的技术专家,擅长高并发编程、Netty网络编程、RocketMQ等技术,国内知名开源数据库中间件MyCAT的志愿者和技术顾问。目前担任上海优速物流的技术专家和经营支撑部门的架构师。对RocketMQ有非常深入的研究,是RocketMQ社区的布道师,不仅实践经验丰富,而且对其源代码有深入且系统的研究。
周继锋
拥有10余年大型项目架构设计及实战经验,曾主导过众多分布式系统、微服务及大数据项目。在高并发、高可用、高可扩展性、高可维护性等领域有丰富经验,对Hadoop、Spark源码进行过深度分析并具有丰富的实战经验。 曾在ERP、医学、互联网行业担任资深工程师、资深架构师、技术总监等职务,炼数成金高级讲师及国内知名的开源分布式数据库中间件Mycat负责人,也是《分布式数据库架构及企业实践:基于Mycat中间件》书籍的作者。

推荐序

当前,全球商业正面临着产业、组织和价值观三大重构。首先,数字技术重新定义了商业模式,颠覆了原有的产业组织,许多行业中的领头羊,不是被行业内部的追赶者所取代,就是因技术进步而受到挑战,技术变革影响行业竞争格局的速度和深度都发生了数量级上的变化;其次,企业的组织也需要重构,过去的中心、多中心式的组织结构已经不能适应数字时代的需要,新时代的组织要全面向分布式升级。再次,价值观也在重构,数字经济体奉行的价值观是开放、分享、透明和责任,这和传统企业的价值观大相径庭。在这一全新价值观驱动下,企业之间为了更好地推进自身组织结构升级,提高产能,已经将目光逐渐转向开放技术,尤其是云计算领域。而开放、无技术绑定、技术标准恰恰是云计算三个最为典型的特征。在这一领域,RedHat无疑是冲在了最前头,其最新推出的《开源故事》,由一系列旨在弘扬开源价值(如英才培养、社区构建、透明文化)的精彩影片构成,详细阐述了这一价值正在对我们的工作与生活所产生的影响。从教育领域到制造社区,再到慈善组织和环保事业,无不充分体现了开源价值理念,以及拥抱这一理念的个人如何推动开放文化成为21世纪创新的新模式。
人的本性中有一种崇尚自由、希望共享的心理。毕竟,隐私只是我们个人生活的一小部分而已,而我们的社会团体生活中,开放却是促进整个集体进步的重要因素。当我们分清楚什么不能公开和什么该公开的时候,以及当我们很好地平衡这两者而非抑制其中一方的时候,我们的生活就会更加美好。开放它们不但没有使公开者蒙受损失,反而引起了人们更多的兴趣和热情,使得相关的技术发展进入一个良性循环而稳步前进,这就产生了一种良好的社会风气。
RocketMQ的开源正是源于对这种开源文化的认同,开放是为了更好的协同创新,并将这一技术推向新的高度。在经历了阿里巴巴集团内部多年“双11”交易核心链路工业级场景的验证,2016年11月,团队将RocketMQ捐献给全球享有盛誉的Apache软件基金会,正式成为孵化项目。至此,RocketMQ 开启了迈向全球顶级开源软件的新征程。通过社区与团队半年多的开放式创新。2017年 9月25日,Apache 软件基金会官方宣布,阿里巴巴捐赠给 Apache 社区的开源分布式消息引擎RocketMQ 从社区正式毕业,成为与Apache Spark“同款”的顶级项目(TLP)。最近,我们也看到越来越多的中国本土开源软件进入Apache,Apache优秀的社区理念驱动着更多立志打造世界级品牌的团队不断发展,促进其生态更加健康和活跃。
在过去几年里,RocketMQ 在第10届、第16届中北亚开源高峰论坛,以及2017年工信部开源峰会的开源软件评比中,都代表中国更高的开源技术,获得了傲人的开源大奖。在这里,请允许我代表RocketMQ团队,感谢大家这些年对RocketMQ的厚爱与支持。丁威同学是RocketMQ社区里比较早期的的“布道师”,也非常感谢他能将自己这些年的积累整理成书,帮助大家更好地理解RocketMQ,参与到RocketMQ社区建设中来。目前,RocketMQ团队与社区正在构建下一代RocketMQ以及领域标准OpenMessaging,我们希望它是Cloud Native编程范式下首选的金融级高可靠、高性能数据消息计算平台,也非常欢迎大家能够加入到社区建设中来。
人类的生活正在因为开源软件而变得更加美好,让我们一起来构筑美好未来!

冯嘉
Alibaba Messaging开源技术负责人
Apache RocketMQ创始人
Linux OpenMessaging创始人、主席

图书目录

推荐序
前言
第1章 阅读源代码前的准备 1
1.1 获取和调试RocketMQ的源代码 1
1.1.1 Eclipse获取RocketMQ源码 2
1.1.2 Eclipse调试RocketMQ源码 9
1.1.3 IntelliJ IDEA获取RocketMQ源码 15
1.1.4 IntelliJ IDEA调试RocketMQ源码 20
1.2 RocketMQ源代码的目录结构 27
1.3 RocketMQ的设计理念和目标 28
1.3.1 设计理念 28
1.3.2 设计目标 28
第2章 RocketMQ路由中心NameServer 31
2.1 NameServer架构设计 31
2.2 NameServer启动流程 32
2.3 NameServer路由注册、故障剔除 36
2.3.1 路由元信息 36
2.3.2 路由注册 38
2.3.3 路由删除 43
2.3.4 路由发现 46
2.4 本章小结 47
第3章 RocketMQ消息发送 49
3.1 漫谈RocketMQ消息发送 49
3.2 认识RocketMQ消息 50
3.3 生产者启动流程 51
3.3.1 初识DefaultMQProducer消息发送者 51
3.3.2 消息生产者启动流程 54
3.4 消息发送基本流程 56
3.4.1 消息长度验证 56
3.4.2 查找主题路由信息 56
3.4.3 选择消息队列 60
3.4.4 消息发送 65
3.5 批量消息发送 71
3.6 本章小结 74
第4章 RocketMQ消息存储 75
4.1 存储概要设计 75
4.2 初识消息存储 76
4.3 消息发送存储流程 78
4.4 存储文件组织与内存映射 83
4.4.1 MappedFileQueue映射文件队列 84
4.4.2 MappedFile内存映射文件 87
4.4.3 TransientStorePool 93
4.5 RocketMQ存储文件 94
4.5.1 Commitlog文件 95
4.5.2 ConsumeQueue文件 97
4.5.3 Index索引文件 100
4.5.4 checkpoint文件 104
4.6 实时更新消息消费队列与索引文件 105
4.6.1 根据消息更新ConumeQueue 107
4.6.2 根据消息更新Index索引文件 108
4.7 消息队列与索引文件恢复 109
4.7.1 Broker正常停止文件恢复 112
4.7.2 Broker异常停止文件恢复 114
4.8 文件刷盘机制 115
4.8.1 Broker同步刷盘 116
4.8.2 Broker异步刷盘 119
4.9 过期文件删除机制 122
4.10 本章小结 126
第5章 RocketMQ消息消费 127
5.1 RocketMQ消息消费概述 127
5.2 消息消费者初探 128
5.3 消费者启动流程 130
5.4 消息拉取 133
5.4.1 PullMessageService实现机制 133
5.4.2 ProcessQueue实现机制 136
5.4.3 消息拉取基本流程 138
5.5 消息队列负载与重新分布机制 154
5.6 消息消费过程 162
5.6.1 消息消费 163
5.6.2 消息确认(ACK) 167
5.6.3 消费进度管理 171
5.7 定时消息机制 176
5.7.1 load方法 177
5.7.2 start方法 178
5.7.3 定时调度逻辑 179
5.8 消息过滤机制 181
5.9 顺序消息 186
5.9.1 消息队列负载 187
5.9.2 消息拉取 187
5.9.3 消息消费 188
5.9.4 消息队列锁实现 195
5.10 本章小结 196
第6章 消息过滤FilterServer 198
6.1 ClassFilter运行机制 198
6.2 FilterServer注册剖析 199
6.3 类过滤模式订阅机制 202
6.4 消息拉取 205
6.5 本章小结 206
第7章 RocketMQ主从同步(HA)机制 207
7.1 RocketMQ主从复制原理 207
7.1.1 HAService整体工作机制 208
7.1.2 AcceptSocketService实现原理 208
7.1.3 GroupTransferService实现原理 210
7.1.4 HAClient实现原理 211
7.1.5 HAConnection实现原理 214
7.2 RocketMQ读写分离机制 220
7.3 本章小结 223
第8章 RocketMQ事务消息 225
8.1 事务消息实现思想 225
8.2 事务消息发送流程 226
8.3 提交或回滚事务 232
8.4 事务消息回查事务状态 233
8.5 本章小结 240
第9章 RocketMQ实战 242
9.1 消息批量发送 242
9.2 消息发送队列自选择 243
9.3 消息过滤 243
9.3.1 TAG模式过滤 244
9.3.2 SQL表达模式过滤 244
9.3.3 类过滤模式 245
9.4 事务消息 247
9.5 Spring整合RocketMQ 250
9.6 Spring Cloud整合RocketMQ 251
9.7 RocketMQ监控与运维命令 258
9.7.1 RocktetMQ监控平台搭建 258
9.7.2 RocketMQ管理命令 261
9.8 应用场景分析 280
9.9 本章小结 281
附录A 参数说明 282

教学资源推荐
作者: 施霞萍 张欢欢 王瑾德 马可幸
作者: 汪同庆 张华 杨先娣
作者: [美] 托尼·加迪斯(Tony Gaddis) 著
作者: (美)Richard Johnsonbaugh;Martin Kalin 著
参考读物推荐
作者: 陈雷 等编著 内封:陈雷 黄桃 李长林 李志 王坤 肖涛 朱栋 编著
作者: 马伟 著
作者: 陈显鹭 阚俊宝 匡大虎 卢稼奇 著