前言

为什么要写这本书

随着互联网技术的蓬勃发展和微服务架构的普遍应用,加上大数据分析及高并发流量场景的复杂度越来越高,系统架构开始追求小型化、轻量化,为此我们也需要拥有高性能、高可用、低延迟、支持顺序、支持容错、支持事务等功能的消息中间件来支撑互联网高速发展。目前,RPC、服务治理、分布式、消息中间件已经成为互联网架构的标配。

引入消息中间件后,服务之间就可以通过可靠的异步调用来降低系统之间的耦合度,提高系统的可用性。消息中间件具有高效的消息处理能力,可以让系统承接大数据量的并发及流量脉冲而不被击垮,在保证性能的同时改善了用户体验。此外,消息中间件还可以解决系统之间数据的一致性(最终一致性)问题。

RocketMQ 作为阿里开源的一款高性能、高吞吐量的消息中间件,承载了阿里 “双11” 的大部分业务,可以说是一名久经战场的 “精英”、值得信任的 “伙伴”。它采用 Java 作为开发语言,自然而然得到了广大互联网架构师的青睐,并成为互联网行业首选的消息中间件。

初次接触 RocketMQ 是在听到它被阿里巴巴正式捐献给 Apache 基金会,成为 Apache 的顶级开源项目时。这意味着承载阿里 “双11” 巨大流量的消息中间件完全开源,对广大 Java 开发者来说无疑是一个巨大的利好,让我们有机会一睹高性能消息中间件 RocketMQ 的 “真容”。作为一名阿里技术崇拜者,我内心异常激动,于是不假思索地在 CSDN 上开通了专栏 “源码研究RocketMQ”,并受到了广大技术爱好者的支持。

RocketMQ 作为一款高性能消息中间件,其核心优势是可靠的消息存储、高性能且低延迟的消息发送、强大的消息堆积能力与消息处理能力、严格的顺序消息模式等。RocketMQ 的另一个核心优势是懂得取舍。软件设计不可能做到面面俱到,消息中间件的理想状态是一条消息能且只能被消费一次,要做到这一点,必然需要牺牲性能。RocketMQ 的设计者解决这一难题的办法是不去解决,即保证消息至少被消费一次,但不承诺消息不会被消费者多次消费,其消费的幂等由消费者实现,从而极大地简化了实现内核,提高了 RocketMQ 的整体性能。

RocketMQ 被捐献给 Apache 基金会后一直在快速发展,相关 OpenMessaging 的标准也已经发布。本书的写作目的是与各位读者探讨 RocketMQ 的实现原理,帮助读者更好地在实际项目中应用 RocketMQ。

读者对象

本书的读者对象如下:

  • RocketMQ 的用户和爱好者;

  • RocketMQ 代码开发志愿者;

  • Java 中高级开发工程师;

  • Java 架构师;

  • Java 开源相关技术人员。

本书特色

本书从源码的角度对 RocketMQ 的实现原理进行详细剖析。作为一本源码阅读类图书,本书的讲解切入点并不是组成 RocketMQ 的一个个源码包,而是功能模块(如 topic 路由中心、消息发送、消息存储、消息消费、事务消息),这样更加贴近实战需求。

如何阅读本书

本书从逻辑上分为三部分。

  • 第一部分为准备篇(第 1 章),简单介绍了 RocketMQ 的设计理念与目标,并介绍了在开发工具中如何对 RocketMQ 进行代码调试。

  • 第二部分为实现篇(第2~9章),重点讲解了 RocketMQ 各个功能模块的实现原理,包括 NameServer、消息发送、消息存储、消息消费、ACL功能、主从同步、消息轨迹、主从切换等。

  • 第三部分为实例篇(第10~11章),先介绍了 RocketMQ 监控,然后通过示例展示了 RocketMQ 的使用技巧。

本书在最后的附录中给出了 RocketMQ 的主要参数列表及含义,增加了各版本概述和升级建议,供读者参考。

本书的行文思路主要是根据消息发送的全流程进行展开,从路由管理到消息发送、消息存储、消息消费,再到顺序消息、事务消息,从而实现消息链路的闭环。建议读者按照该思路带着问题来阅读,这样或许会事半功倍。