RocketMQ消息中间件实战派(上下册)RocketMQ高性能通信渠道 生态全栈技术实践 RocketMQ消息中间件分布式架构落地书
| 运费: | 免运费 |
商品详情
书名:RocketMQ消息中间件实战派(上下册)
定价:236.0
ISBN:9787121469701
作者:胡弦
版次:*1版
出版时间:2024-01
内容提要:
本书覆盖了开发人员在落地分布式架构过程中使用RocketMQ 的主要技术点,包括RocketMQ 的 高性能通信渠道、生产消息、消费消息、存储消息、分布式事务消息、消息的可追踪性、消息的稳定性、消息的高并发、消息的高可用、消息的高性能和RocketMQ 5.x 的新特性。采用"是什么→怎么用→什么原理(源码分析)”的主线来讲解这些技术点。 本书的主要目标:①让读者在动手中学习,而不是"看书时好像全明白了,一动手却发现什么都不会”;②让读者掌握整个RocketMQ 生态的全栈技术和*佳实践,而不是只有RocketMQ 框架;③让读者从RocketMQ 体系化的视角熟悉RocketMQ 的核心原理,而不是零散且碎片化;④让读者成为消息中间件领域的技术专家或架构师,而不只是熟悉RocketMQ;⑤让读者具备自研消息中间件的能力,而不是仅停留在源码分析的层次,"授人以鱼,不如授人以渔”是本书*大的宗旨。 本书适合对分布式架构及支撑分布式架构落地的中间件感兴趣的技术开发人员。无论读者是否接触过 分布式消息中间件,只要具备一定的Java 开发基础,都能通过本书的学习快速掌握分布式架构中消息中间件的开发技能,并利用RocketMQ 消息中间件支撑分布式架构的落地。
作者简介:
曾就职于网易考拉、微医集团、连连支付、政采云等杭州一线独角兽公司,*级技术专家(P8)和业务负责人,具备跨境电商、跨境支付等业务领域0-1的架构设计和开发落地能力,擅长高并发、高可用、和高性能系统架构设计。
媒体评论:
一本书搞清RocketMQ
目录:
*1 篇 基础
*1 章 初识RocketMQ ·························.2
1.1 认识分布式架构 ····························.2
1.1.1 什么是分布式 ·······················.2
1.1.2 什么是架构 ··························.3
1.1.3 分布式架构的冰与火 ··············.5
1.2 认识RocketMQ ·····························.7
1.2.1 什么是RocketMQ ··················.7
1.2.2 RocketMQ 与分布式架构 ·······.12
1.3 搭建RocketMQ 环境 ····················.13
1.3.1 了解RocketMQ 相关的安装包 .13
1.3.2 搭建单Master 的单机环境 ·····.15
1.3.3 搭建多Master 的集群环境 ·····.15
1.3.4 搭建单Master 和单Slave 的集群环境 ·································.16
1.3.5 【实例】搭建Raft 集群环境 ··.18
1.4 RocketMQ 5.0 的新特性 ················.20
*2 章 实现通信渠道 ··························.22
2.1 认识通信渠道 ·····························.22
2.2 通信渠道的架构 ··························.25
2.2.1 认识Netty ·························.25
2.2.2 RocketMQ 通信渠道的架构 ····.29
2.3 使用Netty 实现通信渠道的原理 ······.33
2.3.1 实现通信渠道的通信协议 ······.33
2.3.2 实现客户端通信渠道 ············.38
2.3.3 实现服务端通信渠道 ············.41
2.4 使用客户端连接服务端 ·················.47
2.4.1 分析模块通信渠道的类型 ······.48
2.4.2 连接服务端 ························.50
2.5 【实例】修改通信渠道客户端和服务端的线程模型 ·······················.54
第3 章 消息路由信息的无状态存储和管理 ······································.61
3.1 了解消息路由信息 ·······················.61
3.2 Name Server 的架构 ·····················.68
3.2.1 认识无状态架构 ··················.68
3.2.2 认识Name Server 架构 ·········.69
3.2.3 认识地址服务架构 ···············.72
3.2.4 【实例】用地址服务动态更新客户端中的Name Server 节点的地址信息 ··························.74
3.3 “使用Name Server 存储和管理消息路由信息”的原理 ·······················.77
3.3.1 Name Server 的启动流程 ·······.77
3.3.2 注册Broker Server ···············.84
3.3.3 取消注册的业务场景和取消注册Broker Server ···············.89
3.3.4 存储和管理消息路由信息 ······.93
3.4 【实例】启动多个Name Server 节点,模拟故障以验证Name Server 节点的无状态性 ·································.101
第4 章 生产消息和消费消息 ···············.104
4.1 生产和消费消息的模式 ················.104
4.1.1 生产消息 ··························.104
4.1.2 消费消息 ··························.110
4.2 消费消息的类型 ·························.116
4.2.1 集群消息 ··························.116
4.2.2 广播消息 ··························.118
4.2.3 顺序消息 ··························.119
4.2.4 并发消息 ··························.125
4.2.5 延迟消息 ··························.126
4.2.6 事务消息 ··························.130
4.3 生产消息 ··································.134
4.3.1 生产者SDK 的3 种使用方式 ································.135
4.3.2 采用“同步”模式生产消息 ···.137
4.3.3 采用“异步”模式生产消息 ···.142
4.3.4 采用“*多发送一次”模式生产消息 ··························.148
4.4 消费消息 ··································.152
4.4.1 采用pull 模式消费消息 ········.153
4.4.2 采用push 模式消费消息 ·······.171
4.4.3 采用pop 模式消费消息 ········.183
4.5 采用“请求/应答”消息实现同步调用 ········································.197
4.5.1 “请求/应答”消息的架构 ····.197
4.5.2 分析“请求/应答”消息的过程 ································.198
4.6 【实例】生产者发送消息,消费者顺序地消费消息 ·························.212
4.6.1 验证“普通顺序消息” ········.212
4.6.2 验证“严格顺序消息” ········.217
第5 章 存储消息 ······························.219
5.1 认识存储引擎 ····························.219
5.1.1 什么是存储引擎 ·················.219
5.1.2 存储引擎的架构 ·················.221
5.2 认识存储模型 ····························.222
5.2.1 消息模型 ··························.222
5.2.2 文件模型 ··························.229
5.2.3 【实例】利用源码远程调试存储模型 ································.236
5.3 启动存储引擎 ····························.238
5.3.1 初始化Broker Server 和存储引擎 ································.238
5.3.2 启动Broker Server 和存储引擎 ································.247
5.3.3 【实例】动态修改存储引擎的配置参数 ··························.251
5.4 使用存储引擎处理“储存消息”的请求 ········································.253
5.4.1 接收并处理生产消息的请求 ································.254
5.4.2 存储消息 ··························.257
5.4.3 【实例】利用存储引擎实现批量地存储消息 ·······················.262
5.5 对比存储单条消息和批量消息的性能 ········································.263
第6 章 治理消息 ······························.268
6.1 如何治理消息 ····························.268
6.1.1 治理消息的目标 ·················.268
6.1.2 使用消息度量提供治理消息的依据 ································.276
6.1.3 使用消息管控实现治理消息的落地 ································.280
6.2 认识命令控制台和UI 控制台 ········.285
6.2.1 什么是命令控制台和UI控制台 ·····························.285
6.2.2 启动命令控制台和UI控制台 ·····························.289
6.2.3 使用对象池管理RocketMQDashboard 中通信渠道客户端的核心类 ·····························.292
6.3 使用命令控制台治理消息 ·············.298
6.3.1 执行治理消息的命令 ···········.299
6.3.2 【实例】使用命令控制台,完成
RocketMQ 集群的扩容 ·········.322
6.3.3 【实例】使用命令控制台,完成
RocketMQ 集群的缩容 ·········.325
6.3.4 【实例】使用命令控制台,动态增加Topic 的读/写消息队列的数量 ·················.332
6.4 使用UI 控制台治理消息 ··············.334
6.4.1 使用UI 控制台治理消息的原理 ································.335
6.4.2 【实例】使用UI 控制台手动地禁用消费者组 ····················.341
6.4.3 【实例】使用UI 控制台重置消费者进度 ·······················.343
第7 章 实现分布式事务 ·····················.345
7.1 什么是分布式事务 ······················.345
7.1.1 本地事务 ··························.345
7.1.2 分布式事务 ·······················.350
7.1.3 事务消息与数据的*终一致性 ·····························.354
7.2 使用“两阶段提交”模式处理事务消息 ········································.359
7.3 使用“定时回调”机制查询本地事务状态 ········································.370
7.4 【实例】架构师如何在电商项目中落地分布式事务 ·························.380
7.4.1 分析业务场景 ····················.380
7.4.2 分析业务复杂度 ·················.381
7.4.3 分析技术复杂度 ·················.385
7.4.4 落地代码 ··························.391
7.4.5 验证接入的结果 ·················.392
7.5 【实例】使用泛娱乐业务验证事务消息的故障转移机制 ···················.393
7.5.1 准备环境 ··························.394
7.5.2 架构设计 ··························.394
7.5.3 代码设计 ··························.395
7.5.4 验证故障转移 ····················.397
第8 章 实现消息的可追踪性 ···············.402
8.1 消息的可追踪性 ·························.402
8.1.1 认识消息的可追踪性 ···········.402
8.1.2 为什么需要消息的可追踪性 ···.404
8.1.3 RocketMQ 支持的追踪类型 ···.404
8.2 使用消息轨迹实现消息的可追踪性 ··································.405
8.2.1 认识消息轨迹 ····················.405
8.2.2 轨迹树的原理 ····················.412
8.2.3 【实例】开启消息轨迹,追踪生产消息、消费消息和结束事务消息的过程 ································.421
8.3 使用Hook 机制收集Trace 消息 ······.422
8.3.1 什么是Hook 机制 ···············.422
8.3.2 “使用Hook 机制的实现类收集Trace 消息”的原理 ······.425
8.4 使用“定时线程任务”异步存储Trace信息 ········································.428
8.4.1 为什么要异步存储 ··············.428
8.4.2 异步存储Trace 信息的过程 ···.431
8.4.3 【实例】断点调试“客户端异步存储Trace 信息”···············.441
8.5 使用“OpenTracing + Jaeger”实现消息的分布式链路追踪 ·························.444
8.5.1 认识OpenTracing ···············.444
8.5.2 认识Jaeger ·······················.446
8.5.3 “使用Jaeger 收集消息链路数据”的原理 ·····························.446
8.5.4 “使用OpenTracing 规范消息链路追踪”的原理 ····················.448
8.5.5 【实例】收集普通消息和事务消息,使用Jaeger 实现可视化 ········.452
8.6 【实例】自定义Hook 和Trace 信息的派发类 ·····································.456
8.6.1 设计 ································.457
8.6.2 关键代码分析 ····················.457
第9 章 保证消息的稳定性 ··················.461
9.1 什么是消息的稳定性 ···················.461
9.1.1 认识稳定性 ·······················.461
9.1.2 认识消息的稳定性 ··············.466
9.1.3 消息稳定性技术 ·················.467
9.2 实现RocketMQ 的实时监控 ··········.472
9.2.1 认识RocketMQ Exporter 及其相关组件 ··························.472
9.2.2 实时监控的逻辑架构 ···········.474
9.2.3 “使用RocketMQ Exporter 实现实时监控”的原理 ··············.477
9.2.4 搭建监控环境 ····················.486
9.2.5 【实例】基于Prometheus 和Alert Manager 的RocketMQ实时告警 ··························.494
9.3 实现RocketMQ 客户端的实时度量 ··································.503
9.3.1 认识Skywalking ·················.503
9.3.2 “使用Skywalking 实时度量RocketMQ 客户端”的原理 ···.504
9.3.3 搭建监控环境 ····················.509
9.3.4 【实例】修改源码动态设置一些延迟时间,触发基于Skywalking和钉钉的告警阈值 ··············.511
9.4 【实例】使用RocketMQ Dashboard实时监控RocketMQ ····················.515
9.4.1 设计 ································.515
9.4.2 修改RocketMQ Dashboard 的源码 ································.516
9.4.3 配置监控规则 ····················.517
9.4.4 初始化生产者和消费者服务 ··.517
9.4.5 验证监控告警 ····················.518
9.5 【实例】改造RocketMQ 以支持Nacos 集群管理 ··························.520
9.5.1 架构设计 ··························.520
9.5.2 落地代码 ··························.521
9.5.3 验证 ································.524
第4 篇 高并发、高可用和高性能
*10 章 消息的高并发 ······················.528
10.1 消息的高并发概述 ·····················.528
10.1.1 什么是高并发 ··················.528
10.1.2 为什么要实现消息的高并发 ·····························.529
10.2 使用“管理通信渠道”实现消息的高并发 ·····································.530
10.2.1 通信渠道与高并发 ············.530
10.2.2 管理生产者与Broker Server之间的通信渠道 ·················.532
10.2.3 管理消费者与Broker Server之间的通信渠道 ·················.533
10.3 使用“提高消费者处理消息的功能”实现消息的高并发 ······················.534
10.3.1 消费者处理消息的功能与高并发 ·····························.534
10.3.2 使用“扩容消费者客户端”来提高消费消息的并行性 ········.534
10.3.3 采用pop 模式来提高消费消息的速度 ································.535
10.3.4 【实例】实现“单进程单消费者的并发和批量消费消息” ·····························.536
10.3.5 【实例】实现“单进程多消费者实例并发生产和消费消息” ·····························.541
10.4 使用线程池实现消息的高并发 ······.550
10.4.1 为什么要使用线程池 ·········.550
10.4.2 使用线程池实现消息的高并发的原理 ································.551
10.4.3 【实例】使用RocketMQ 自带的线程实现生产和消费消息的并发性 ·····························.558
10.4.4 【实例】动态修改Consumer客户端的核心线程数 ···········.559
10.5 采用“异步”模式实现消息的高并发 ····································.562
10.5.1 使用“回调+异步响应对象”实现生产者的“异步”模式 ································.562
10.5.2 使用“异步命令事件处理器”实现Broker Server 的“异步”模式 ································.563
10.5.3 使用“流水线”技术实现存储引擎的“异步”模式 ···········.564
10.6 使用“负载均衡”实现消息的高并发 ·····································.566
10.6.1 什么是负载均衡 ···············.566
10.6.2 “使用选择器实现生产消息的负载均衡”的原理 ··············.576
10.6.3 “使用客户端负载均衡实现消费消息的均衡性”的原理 ········.577
10.6.4 “使用服务端负载均衡实现消费消息的均衡性”的原理 ········.578
10.6.5 【实例】动态调整消费者客户端的负载均衡策略 ·················.579
*11 章 消息的高可用 ·······················.583
11.1 什么是消息的高可用 ··················.583
11.1.1 生产消息的高可用 ············.584
11.1.2 存储消息的高可用 ············.585
11.1.3 消费消息的高可用 ············.585
11.2 实现生产消息的高可用——利用故障容错机制 ··································.587
11.2.1 什么是故障容错机制 ·········.587
11.2.2 重试生产消息失败的请求 ···.588
11.2.3 过滤故障的Broker Server ····.590
11.2.4 故障延迟 ························.591
11.2.5 【实例】在Spring Cloud Alibaba项目中,植入故障并验证故障
容错机制 ··························.594
11.3 实现消费消息的高可用——利用重试队列和死信队列 ·························.596
11.3.1 利用“重试队列”实现高可用的核心原理 ··························.597
11.3.2 利用“死信队列”实现高可用的核心原理 ··························.598
11.3.3 【实例】动态调整重试策略,并验证消费失败的高可用性 ···.599
11.3.4 【实例】在消息重试失败后,消费死信队列中的消息 ········.601
11.4 实现Broker Server 的高可用——利用主/从同步 ·································.602
11.4.1 什么是主/从同步 ···············.602
11.4.2 实现主/从节点之间的通信渠道 ································.605
11.4.3 实现主/从节点之间消息的同步 ································.610
11.4.4 【实例】模拟Broker Server主/从同步的业务场景 ··········.614
11.5 实现Broker Server 的高可用——利用多副本架构(Dledger) ···············.617
11.5.1 什么是多副本架构(DLedger) ·······················.617
11.5.2 “多副本架构的通信渠道”的原理 ································.618
11.5.3 “多副本架构的协议”的原理 ································.621
11.5.4 “多副本架构的手动选举”的原理 ································.627
11.5.5 “多副本架构的自动选举”的原理 ································.631
11.5.6 “多副本架构的消息存储”的原理 ································.634
11.5.7 “多副本架构中集群之间消息同步”的原理 ····················.638
11.5.8 【实例】在主节点出现故障后,多副本架构(DLedger)自动选举,并保持主/从消息一致性 ·······.645
11.6 【实例】模拟业务场景“从主/从架构升级为多副本架构”,并验证消息的高可用性 ··································.651
11.7 【实例】使用微服务来验证多副本的手动选举功能的高可用性 ·············.654
*12 章 消息的高性能 ······················.657
12.1 什么是消息的高性能 ·················.657
12.1.1 生产消息的高性能 ············.657
12.1.2 存储消息的高性能 ············.659
12.1.3 消费消息的高性能 ············.660
12.2 使用本地缓存实现高性能 ···········.661
12.2.1 缓存客户端通信渠道 ·········.661
12.2.2 缓存消息路由信息 ············.663
12.2.3 【实例】使用IDEA 调试“缓存客户端通信渠道” ······.665
12.3 提升存储消息的性能——利用CommitLog 文件顺序写 ···············.670
12.3.1 什么是CommitLog 文件 ·····.670
12.3.2 CommitLog 文件的存储格式 ································.672
12.3.3 利用“顺序写”存储消息的原理 ································.673
12.4 提高消费消息的速度——利用ConsumeQueue 文件实现 ··············.676
12.4.1 什么是ConsumeQueue文件 ································.677
12.4.2 构建ConsumeQueue 文件 ····.678
12.4.3 利用ConsumeQueue 文件提高消费消息的性能 ·················.683
12.5 提高查询消息的速度——利用索引文件实现 ··································.684
12.5.1 什么是索引文件 ···············.684
12.5.2 构建索引文件 ··················.685
12.5.3 利用索引文件提高查询消息的性能 ································.687
12.6 提升消费消息RPC 请求的性能——利用零拷贝实现 ·························.687
12.6.1 什么是零拷贝 ··················.688
12.6.2 使用Netty 的FileRegion 类实现文件的零拷贝 ····················.688
12.6.3 在Broker Server 的消息处理器中使用零拷贝 ·······················.691
12.7 提升Broker Server 写消息的性能——利用内存映射、Page Cache 及堆外
内存实现 ··································.692
12.7.1 什么是内存映射、Page Cache 和堆外内存 ··························.693
12.7.2 写消息高性能的逻辑架构 ···.695
12.7.3 “利用MappedFile 文件实现内存映射”的原理 ··············.696
12.7.4 “利用内存映射实现Page Cache”的原理 ·····························.696
12.7.5 “管理堆外内存和Page Cache”的原理 ·····························.697
12.8 清理过期的ConsumeQueue 文件和CommitLog 文件 ························.702
12.8.1 清理过期的ConsumeQueue文件 ································.702
12.8.2 清理过期的CommitLog文件 ································.704
12.8.3 【实例】利用Spring CloudAlibaba 项目演示清理过期的ConsumeQueue 文件和CommitLog文件 ································.709
第5 篇 应用
*13 章 RocketMQ 在分布式架构中的应用 ····································.712
13.1 RocketMQ 在Spring Boot 中的应用 ········································.712
13.1.1 为什么RocketMQ 要支持Spring Boot ·······················.712
13.1.2 利用Spring Boot 作为基础框架生产和消费消息 ·················.713
13.2 RocketMQ 在Spring Cloud Alibaba 中的应用 ·······································.719
13.2.1 为什么Spring Cloud Alibaba 要支持RocketMQ ··················.719
13.2.2 利用Spring Cloud Alibaba 作为基础框架生产和消费消息 ·····.719
13.2.3 Spring Cloud Alibaba 定制化RocketMQ 的原理 ···············.728
13.3 【实例】将命令式编程模式升级为函数式编程模式,完成消息的生产和消费 ········································.730
13.3.1 采用命令式编程模式生产和消费消息 ··························.730
13.3.2 将命令式编程模式升级为函数式编程模式 ·················.731
13.4 RocketMQ 在RocketMQ Connect 中的应用 ········································.732
13.4.1 什么是Message Connect ·····.733
13.4.2 什么是RocketMQ Connect ··.735
13.4.3 RocketMQ Connect 的核心架构 ································.736
13.4.4 “利用生产者和消费者来同步集群信息”的原理 ··············.739
13.4.5 “利用监听器完成服务发现”的原理 ································.743
13.4.6 “利用客户端负载均衡实现同步消息的高吞吐量”的原理 ·····.744
13.4.7 【实例】搭建RocketMQ Connect的本地和分布式环境 ···········.747
13.5 RocketMQ 在Event Bridge 中的应用 ········································.750
13.5.1 什么是Event Bridge ···········.750
13.5.2 Event Bridge 的核心架构 ·····.751
13.5.3 利用RocketMQ 实现EventBridge 的核心原理 ··············.756
13.6 RocketMQ 在多语言环境中的应用 ········································.757
13.6.1 RocketMQ 的多语言架构设计 ································.757
13.6.2 【实例】使用Go 语言客户端生产和消费消息 ·················.758
13.7 RocketMQ 在大数据中的应用 ······.760
13.7.1 RocketMQ Streams 的核心架构 ································.761
13.7.2 【实例】利用RocketMQ Streams处理微服务中的流数据 ········.765
第6 篇 新特性
章 分析RocketMQ 5.x 的新特性 ··.768
14.1 利用“对等部署模式”实现BrokerServer 的高可用 ·························.768
14.1.1 认识“对等部署模式” ······.768
14.1.2 实现“对等部署模式”的原理 ································.771
14.1.3 【实例】利用微服务来验证“对等部署模式”的高可用 ···.777
14.2 利用“Slave 代理Master 模式”实现Broker Server 的高可用 ················.778
14.2.1 认识“Slave 代理Master模式” ·····························.778
14.2.2 实现“Slave 代理Master模式”的原理 ····················.779
14.2.3 【实例】利用微服务来验证“Slave 代理Master 模式”的
高可用 ·····························.788
14.3 利用“RocketMQ Controller 模式”实现Broker Server 的高可用 ·········.790
14.3.1 认识“RocketMQ Controller模式” ·····························.791
14.3.2 实现“RocketMQ Controller模式”的原理 ····················.793
14.3.3 利用“RocketMQ Controller模式”完成集群管理 ···········.797
14.3.4 实现“RocketMQ Controller 模式中多副本状态机”的原理 ·····.806
14.3.5 【实例】验证“RocketMQController 模式”的
高可用性 ··························.810
14.4 利用“RocketMQ Proxy 模式”统一多语言客户端 ····························.814
14.4.1 认识“RocketMQ Proxy模式” ·····························.814
14.4.2 实现“RocketMQ Proxy 模式”的原理 ································.816
14.4.3 实现“代理多语言客户端请求”的原理 ···························.821
- 电子工业出版社精品店
- 扫描二维码,访问我们的微信店铺