前言
为什么要写这本书
随着互联网技术蓬勃发展,微服务架构思想的兴起,系统架构开始追求小型化、轻量化,原有的大型集中式的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的朋友们!
周继锋