RocketMQ实战与原理解析.杨开元(带详细书签).pdf
作者是阿里资深数据专家,对RocketMQ有深入的研究,并有大量的实践经验。在写这本书之前,作者不仅系统、深入地阅读了RocketMQ的源代码,而且还向RocketMQ的官方开发团队深入了解了它的诸多设计细节。作者结合自己多年使用RocketMQ的经验,从开发和运维两个维度,给出了大部分场景下的优秀实践,能帮助读者在学会使用和用好RocketMQ的同时,尽量少“踩坑”。同时,本书也结合源码分析了分布式消息队列的原理,使读者可以在复杂业务场景下定制有特殊功能的消息队列。 全书共13章,在逻辑上分为两大部分: 第一部分(第1~8章):RocketMQ实战 第1~2章详细讲解了RocketMQ如何快速入门,以及在生产环境下的配置和使用; 第3~4章具体讲解了不同类型 生产者和消费者的特点,以及分布式消息队列的协调者NameServer; 第5章从消息的存储、发送、复制和高可用等多个维度讲解了RocketMQ的内部机制; 第6章讨论了消息的可靠性,如何让消息队列在满足业务逻辑需求的同时稳定、可靠地长期运行; 第7章讨论了在大流量场景下,吞吐量优先时RocketMQ的使用方法; 第8章介绍RocketMQ与SpringBoot、Spark、Flink以及自定义的运维工具等其它系统的对接方法; 第二部分(第9~13章):RocketMQ原理 首先对RocketMQ的源码结构进行了整体介绍,然后深入地分析了NameServer、各种常用消费类、主从同步机制,以及基于Netty的通信的源码实现。掌握这些源代码以后,读者可以快速定制属于自己的具有特殊功能的消息中间件。 第1章 快速入门 1 1.1 消息队列功能介绍 1 1.1.1 应用解耦 1 1.1.2 流量消峰 2 1.1.3 消息分发 3 1.2 RocketMQ简介 4 1.3 快速上手RocketMQ 4 1.3.1 RocketMQ的下载、安装和配置 5 1.3.2 启动消息队列服务 6 1.3.3 用命令行发送和接收消息 6 1.3.4 关闭消息队列 6 1.4 本章小结 7 第2章 生产环境下的配置和使用 8 2.1 RocketMQ各部分角色介绍 8 2.2 多机集群配置和部署 9 2.2.1 启动多个NameServer和Broker 10 2.2.2 配置参数介绍 11 2.3 发送/接收消息示例 13 2.4 常用管理命令 15 2.5 通过图形界面管理集群 21 2.6 本章小结 22 第3章 用适合的方式发送和接收消息 23 3.1 不同类型的消费者 23 3.1.1 DefaultMQPushConsumer的使用 23 3.1.2 DefaultMQPushConsumer的处理流程 25 3.1.3 DefaultMQPushConsumer的流量控制 28 3.1.4 DefaultMQPullConsumer 30 3.1.5 Consumer的启动、关闭流程 32 3.2 不同类型的生产者 33 3.2.1 DefaultMQProducer 34 3.2.2 发送延迟消息 36 3.2.3 自定义消息发送规则 36 3.2.4 对事务的支持 37 3.3 如何存储队列位置信息 38 3.4 自定义日志输出 42 3.5 本章小结 44 第4章 分布式消息队列的协调者 45 4.1 NameServer的功能 45 4.1.1 集群状态的存储结构 46 4.1.2 状态维护逻辑 47 4.2 各个角色间的交互流程 48 4.2.1 交互流程源码分析 48 4.2.2 为何不用ZooKeeper 50 4.3 底层通信机制 50 4.3.1 Remoting模块 51 4.3.2 协议设计和编解码 54 4.3.3 Netty库 56 4.4 本章小结 56 第5章 消息队列的核心机制 57 5.1 消息存储和发送 57 5.2 消息存储结构 58 5.3 高可用性机制 60 5.4 同步刷盘和异步刷盘 61 5.5 同步复制和异步复制 62 5.6 本章小结 63 第6章 可靠性优先的使用场景 64 6.1 顺序消息 64 6.1.1 全局顺序消息 64 6.1.2 部分顺序消息 65 6.2 消息重复问题 67 6.3 动态增减机器 67 6.3.1 动态增减NameServer 67 6.3.2 动态增减Broker 69 6.4 各种故障对消息的影响 70 6.5 消息优先级 72 6.6 本章小结 73 第7章 吞吐量优先的使用场景 74 7.1 在Broker端进行消息过滤 74 7.1.1 消息的Tag和Key 74 7.1.2 通过Tag进行过滤 75 7.1.3 用SQL表达式的方式进行过滤 75 7.1.4 Filter Server方式过滤 77 7.2 提高Consumer处理能力 78 7.3 Consumer的负载均衡 80 7.3.1 DefaultMQPushConsumer的负载均衡 80 7.3.2 DefaultMQPullConsumer的负载均衡 81 7.4 提高Producer的发送速度 83 7.5 系统性能调优的一般流程 85 7.6 本章小结 87 第8章 和其他系统交互 88 8.1 在SpringBoot中使用RocketMQ 88 8.1.1 直接使用 88 8.1.2 通过Spring Messaging方式使用 90 8.2 直接使用云上RocketMQ 91 8.3 RocketMQ与Spark、Flink对接 93 8.4 自定义开发运维工具 93 8.4.1 开源版本运维工具功能介绍 94 8.4.2 基于Tools模块开发自定义运维工具 95 8.5 本章小结 96 第9章 首个Apache中间件顶级项目 97 9.1 RocketMQ的前世今生 97 9.2 Apache顶级项目(TLP)之路 98 9.3 源码结构 99 9.4 不断迭代的代码 100 9.5 本章小结 102 第10章 NameServer源码解析 103 10.1 模块入口代码的功能 103 10.1.1 入口函数 103 10.1.2 解析命令行参数 104 10.1.3 初始化NameServer的Controller 105 10.2 NameServer的总控逻辑 106 10.3 核心业务逻辑处理 107 10.4 集群状态存储 109 10.5 本章小结 111 第11章 最常用的消费类 112 11.1 整体流程 112 11.1.1 上层接口类 112 11.1.2 DefaultMQPushConsumer的实现者 114 11.1.3 获取消息逻辑 116 11.2 消息的并发处理 118 11.2.1 并发处理过程 118 11.2.2 ProcessQueue对象 121 11.3 生产者消费者的底层类 122 11.3.1 MQClientInstance类的创建规则 122 11.3.2 MQClientInstance类的功能 124 11.4 本章小结 127 第12章 主从同步机制 128 12.1 同步属性信息 128 12.2 同步消息体 130 12.3 sync_master和async_master 132 12.4 本章小结 134 第13章 基于Netty的通信实现 135 13.1 Netty介绍 135 13.2 Netty架构总览 136 13.2.1 重新实现ByteBuffer 136 13.2.2 统一的异步 I/O接口 137 13.2.3 基于拦截链模式的事件模型 138 13.2.4 高级组件 139 13.3 Netty用法示例 140 13.3.1 Discard服务器 140 13.3.2 查看收到的数据 144 13.4 RocketMQ基于Netty的通信功能实现 145 13.4.1 顶层抽象类 145 13.4.2 自定义协议 148 13.4.3 基于Netty的Server和Client 151 13.5 本章小结 152 生产者和消费者的特点,以及分布式消息队列的协调者NameServer; 第5章从消息的存储、发送、复制和高可用等多个维度讲解了RocketMQ的内部机制; 第6章讨论了消息的可靠性,如何让消息队列在满足业务逻辑需求的同时稳定、可靠地长期运行; 第7章讨论了在大流量场景下,吞吐量优先时RocketMQ的使用方法; 第8章介绍RocketMQ与SpringBoot、Spark、Flink以及自定义的运维工具等其它系统的对接方法; 第二部分(第9~13章):RocketMQ原理 首先对RocketMQ的源码结构进行了整体介绍,然后深入地分析了NameServer、各种常用消费类、主从同步机制,以及基于Netty的通信的源码实现。掌握这些源代码以后,读者可以快速定制属于自己的具有特殊功能的消息中间件。 第1章 快速入门 1 1.1 消息队列功能介绍 1 1.1.1 应用解耦 1 1.1.2 流量消峰 2 1.1.3 消息分发 3 1.2 RocketMQ简介 4 1.3 快速上手RocketMQ 4 1.3.1 RocketMQ的下载、安装和配置 5 1.3.2 启动消息队列服务 6 1.3.3 用命令行发送和接收消息 6 1.3.4 关闭消息队列 6 1.4 本章小结 7 第2章 生产环境下的配置和使用 8 2.1 RocketMQ各部分角色介绍 8 2.2 多机集群配置和部署 9 2.2.1 启动多个NameServer和Broker 10 2.2.2 配置参数介绍 11 2.3 发送/接收消息示例 13 2.4 常用管理命令 15 2.5 通过图形界面管理集群 21 2.6 本章小结 22 第3章 用适合的方式发送和接收消息 23 3.1 不同类型的消费者 23 3.1.1 DefaultMQPushConsumer的使用 23 3.1.2 DefaultMQPushConsumer的处理流程 25 3.1.3 DefaultMQPushConsumer的流量控制 28 3.1.4 DefaultMQPullConsumer 30 3.1.5 Consumer的启动、关闭流程 32 3.2 不同类型的生产者 33 3.2.1 DefaultMQProducer 34 3.2.2 发送延迟消息 36 3.2.3 自定义消息发送规则 36 3.2.4 对事务的支持 37 3.3 如何存储队列位置信息 38 3.4 自定义日志输出 42 3.5 本章小结 44 第4章 分布式消息队列的协调者 45 4.1 NameServer的功能 45 4.1.1 集群状态的存储结构 46 4.1.2 状态维护逻辑 47 4.2 各个角色间的交互流程 48 4.2.1 交互流程源码分析 48 4.2.2 为何不用ZooKeeper 50 4.3 底层通信机制 50 4.3.1 Remoting模块 51 4.3.2 协议设计和编解码 54 4.3.3 Netty库 56 4.4 本章小结 56 第5章 消息队列的核心机制 57 5.1 消息存储和发送 57 5.2 消息存储结构 58 5.3 高可用性机制 60 5.4 同步刷盘和异步刷盘 61 5.5 同步复制和异步复制 62 5.6 本章小结 63 第6章 可靠性优先的使用场景 64 6.1 顺序消息 64 6.1.1 全局顺序消息 64 6.1.2 部分顺序消息 65 6.2 消息重复问题 67 6.3 动态增减机器 67 6.3.1 动态增减NameServer 67 6.3.2 动态增减Broker 69 6.4 各种故障对消息的影响 70 6.5 消息优先级 72 6.6 本章小结 73 第7章 吞吐量优先的使用场景 74 7.1 在Broker端进行消息过滤 74 7.1.1 消息的Tag和Key 74 7.1.2 通过Tag进行过滤 75 7.1.3 用SQL表达式的方式进行过滤 75 7.1.4 Filter Server方式过滤 77 7.2 提高Consumer处理能力 78 7.3 Consumer的负载均衡 80 7.3.1 DefaultMQPushConsumer的负载均衡 80 7.3.2 DefaultMQPullConsumer的负载均衡 81 7.4 提高Producer的发送速度 83 7.5 系统性能调优的一般流程 85 7.6 本章小结 87 第8章 和其他系统交互 88 8.1 在SpringBoot中使用RocketMQ 88 8.1.1 直接使用 88 8.1.2 通过Spring Messaging方式使用 90 8.2 直接使用云上RocketMQ 91 8.3 RocketMQ与Spark、Flink对接 93 8.4 自定义开发运维工具 93 8.4.1 开源版本运维工具功能介绍 94 8.4.2 基于Tools模块开发自定义运维工具 95 8.5 本章小结 96 第9章 首个Apache中间件顶级项目 97 9.1 RocketMQ的前世今生 97 9.2 Apache顶级项目(TLP)之路 98 9.3 源码结构 99 9.4 不断迭代的代码 100 9.5 本章小结 102 第10章 NameServer源码解析 103 10.1 模块入口代码的功能 103 10.1.1 入口函数 103 10.1.2 解析命令行参数 104 10.1.3 初始化NameServer的Controller 105 10.2 NameServer的总控逻辑 106 10.3 核心业务逻辑处理 107 10.4 集群状态存储 109 10.5 本章小结 111 第11章 最常用的消费类 112 11.1 整体流程 112 11.1.1 上层接口类 112 11.1.2 DefaultMQPushConsumer的实现者 114 11.1.3 获取消息逻辑 116 11.2 消息的并发处理 118 11.2.1 并发处理过程 118 11.2.2 ProcessQueue对象 121 11.3 生产者消费者的底层类 122 11.3.1 MQClientInstance类的创建规则 122 11.3.2 MQClientInstance类的功能 124 11.4 本章小结 127 第12章 主从同步机制 128 12.1 同步属性信息 128 12.2 同步消息体 130 12.3 sync_master和async_master 132 12.4 本章小结 134 第13章 基于Netty的通信实现 135 13.1 Netty介绍 135 13.2 Netty架构总览 136 13.2.1 重新实现ByteBuffer 136 13.2.2 统一的异步 I/O接口 137 13.2.3 基于拦截链模式的事件模型 138 13.2.4 高级组件 139 13.3 Netty用法示例 140 13.3.1 Discard服务器 140 13.3.2 查看收到的数据 144 13.4 RocketMQ基于Netty的通信功能实现 145 13.4.1 顶层抽象类 145 13.4.2 自定义协议 148 13.4.3 基于Netty的Server和Client 151 13.5 本章小结 152
用户评论