前言

为什么要写这本书

几年前在做一个项目的时候,若需要用到消息队列,简单调研一下就会决定用Kafka,因为当时还不知道有RocketMQ。在我加入阿里后,当时有个项目需要用到消息中间件,试用了RocketMQ,发现阿里开源的消息中间件性能非常强大,但是上手有点费劲,因为现有文档多是零零散散的博文。在没有合适文档指导的情况下,对系统中用到的RocketMQ模块心里没底,系统偶尔出现异常时总会束手无策,需要通过查看很多源码,才能保证系统的稳定运行。

熟悉RocketMQ以后,我发现它是一款非常优秀的中间件产品,可以确保不丢消息,而且效率很高。同时因为它是用Java开发的,所以修改起来比较容易。在阿里内部,RocketMQ很好地服务了集团大大小小上千个应用,在每年的双十一当天,更有不可思议的万亿级消息通过RocketMQ流转(在2017年的双11当天,整个阿里巴巴集团通过RocketMQ流转的线上消息达到了万亿级,峰值TPS达到5600万),在阿里大中台策略上发挥着举足轻重的作用。所以如果有合适的参考文档,RocketMQ会被更多人接受和使用,让更多人不必重复造“轮子”。

我做了很多年开发,在学校课本上学的开发知识有限,大多数是通过看书和上网学到的,其中很多优秀的文章对自己帮助很大。所以我很希望能用这本书回馈技术社区中有需要的开发者们。

动笔写这本书前,我系统地阅读了RocketMQ的源码,有些理解不够透彻的地方请教了阿里RocketMQ开发团队的同事,然后也总结了自己多年实际工作中的一些经验。希望这本书能简明扼要地说清楚RocketMQ的使用方法和核心原理。

读者对象

❑ 希望学习分布式系统或分布式消息队列的开发人员。

❑ 服务端系统开发者,他们可以借助高质量中间件来提高开发效率。

❑ 软件架构师,他们可以通过消息队列优化复杂系统的设计。

本书特色

本书系统地介绍了RocketMQ这款优秀的分布式消息队列软件,通过阅读本书,读者可以快速把RocketMQ应用到自己的项目中,也可以通过更改源码定制符合自身业务的消息中间件。

如何阅读本书

本书分为两大部分:

第一部分是RocketMQ实战,包括第1~8章。这是本书的主体内容,可帮助读者快速用好RocketMQ这个分布式消息队列。

这部分是按照由浅入深的方式撰写的,为了让读者快速上手,首先介绍了搭建一个简单RocketMQ集群的方法,以此来发送和接收消息;然后详细介绍了如何用好Consumer和Producer,如何选择合适的类以及进行参数设置;再进一步根据应用,说明如何让RocketMQ在各种异常情况下保持稳定可靠,以及如何增大RocketMQ的吞吐量,从而在单位时间内处理更多的消息。

第二部分是源码分析,包括第9~13章。当读者有特殊的业务需求,需要更改或扩展RocketMQ现有功能的时候,这部分内容能帮助读者快速熟悉源码,找到要下手更改的地方,快速实现想要的功能。

这部分也适合想通过源码,深入学习消息队列的读者阅读。学习别人优秀的代码是提升自己技术水平的一条有效途径。

勘误和支持

由于水平有限,编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。有任何的意见或建议,都可以通过邮箱rocketmqqa@163.com和我联系,真挚期待你的反馈。

致谢

写技术书籍很耗费时间,加之互联网行业快节奏的工作方式,导致我写这本书的时间大多是在周末和夜晚。在此感谢家人对我的支持和理解,尤其感谢我的妻子,没有她对家庭的照顾和对我的鼓励,这本书是无法完成的。

感谢阿里消息中间件团队的Leader王小瑞,是你从技术和写作思路上给我很大的帮助。感谢消息中间件团队的其他同学,你们为开源社区贡献了一个高质量的软件,你们写的很多高质量博文使开发者更容易理解RocketMQ。

感谢机械工业出版社的编辑杨福川、张锡鹏,感谢云栖社区的刁云怡,阿里的校友耿嘉安,是你们始终支持我的写作,你们的引导和帮助使我能顺利完成全部书稿。

谨以本书献给我最亲爱的家人,以及众多热爱软件开发工作的朋友们!

杨开元