内容简介
本书从消息中间件的概念和RabbitMQ的历史切入,主要阐述RabbitMQ的安装、使用、配置、管理、运维、原理、扩展等方面的细节。本书大致可以分为基础篇、进阶篇和高阶篇三个部分。基础篇首先介绍RabbitMQ的基本安装及使用方式,方便零基础的读者以*舒适的方式融入到RabbitMQ之中。其次介绍RabbitMQ的基本概念,包括生产者、消费者、交换器、队列、绑定等。之后通过Java语言讲述了客户端如何与RabbitMQ建立(关闭)连接、声明(删除)交换器、队列、绑定关系,以及如何发送和消费消息等。进阶篇讲述RabbitMQ的 TTL、死信、延迟队列、优先级队列、RPC、消息持久化、生产端和消费端的消息确认机制等内容,以期读者能够掌握RabbitMQ的使用精髓。本书中间篇幅主要从RabbitMQ 的管理、配置、运维这三个角度来为读者提供帮助文档及解决问题的思路。高阶篇主要阐述RabbitMQ的存储机制、流控及镜像队列的原理,深入地讲述RabbitMQ的一些实现细节,便于读者加深对RabbitMQ的理解。本书还涉及网络分区的概念,此内容可称为魔鬼篇,需要掌握前面的所有内容才可理解其中的门道。本书*后讲述的是RabbitMQ的一些扩展内容及附录,供读者参考之用。作者简介:
计算机硕士毕业,在互联网公司担任高级开发工程师,从事消息中间件的研究及开发,主要包括RabbitMQ和Kafka。目 录:
第1章 RabbitMQ简介 11.1 什么是消息中间件 2
1.2 消息中间件的作用 3
1.3 RabbitMQ的起源 4
1.4 RabbitMQ的安装及简单使用 6
1.4.1 安装Erlang 7
1.4.2 RabbitMQ的安装 8
1.4.3 RabbitMQ的运行 8
1.4.4 生产和消费消息 10
1.5 小结 14
第2章 RabbitMQ入门 15
2.1 相关概念介绍 16
2.1.1 生产者和消费者 16
2.1.2 队列 18
2.1.3 交换器、路由键、绑定 19
2.1.4 交换器类型 21
2.1.5 RabbitMQ运转流程 23
2.2 AMQP协议介绍 26
2.2.1 AMQP生产者流转过程 27
2.2.2 AMQP消费者流转过程 29
2.2.3 AMQP命令概览 30
2.3 小结 32
第3章 客户端开发向导 33
3.1 连接RabbitMQ 34
3.2 使用交换器和队列 36
3.2.1 exchangeDeclare方法详解 37
3.2.2 queueDeclare方法详解 39
3.2.3 queueBind方法详解 41
3.2.4 exchangeBind方法详解 42
3.2.5 何时创建 43
3.3 发送消息 44
3.4 消费消息 46
3.4.1 推模式 46
3.4.2 拉模式 49
3.5 消费端的确认与拒绝 50
3.6 关闭连接 52
3.7 小结 54
第4章 RabbitMQ进阶 55
4.1 消息何去何从 56
4.1.1 mandatory参数 56
4.1.2 immediate参数 57
4.1.3 备份交换器 58
4.2 过期时间(TTL) 60
4.2.1 设置消息的TTL 60
4.2.2 设置队列的TTL 62
4.3 死信队列 63
4.4 延迟队列 65
4.5 优先级队列 67
4.6 RPC实现 68
4.7 持久化 72
4.8 生产者确认 74
4.8.1 事务机制 74
4.8.2 发送方确认机制 77
4.9 消费端要点介绍 84
4.9.1 消息分发 85
4.9.2 消息顺序性 87
4.9.3 弃用QueueingConsumer 88
4.10 消息传输保障 90
4.11 小结 91
第5章 RabbitMQ管理 92
5.1 多租户与权限 93
5.2 用户管理 97
5.3 Web端管理 99
5.4 应用与集群管理 105
5.4.1 应用管理 105
5.4.2 集群管理 108
5.5 服务端状态 111
5.6 HTTP API接口管理 121
5.7 小结 130
第6章 RabbitMQ配置 131
6.1 环境变量 132
6.2 配置文件 136
6.2.1 配置项 137
6.2.2 配置加密 140
6.2.3 优化网络配置 142
6.3 参数及策略 146
6.4 小结 151
第7章 RabbitMQ运维 152
7.1 集群搭建 153
7.1.1 多机多节点配置 154
7.1.2 集群节点类型 158
7.1.3 剔除单个节点 160
7.1.4 集群节点的升级 162
7.1.5 单机多节点配置 163
7.2 查看服务日志 164
7.3 单节点故障恢复 172
7.4 集群迁移 173
7.4.1 元数据重建 174
7.4.2 数据迁移和客户端连接的切换 183
7.4.3 自动化迁移 185
7.5 集群监控 189
7.5.1 通过HTTP API接口提供监控数据 189
7.5.2 通过客户端提供监控数据 196
7.5.3 检测RabbitMQ服务是否健康 199
7.5.4 元数据管理与监控 203
7.6 小结 205
第8章 跨越集群的界限 206
8.1 Federation 207
8.1.1 联邦交换器 207
8.1.2 联邦队列 214
8.1.3 Federation的使用 216
8.2 Shovel 223
8.2.1 Shovel的原理 224
8.2.2 Shovel的使用 227
8.2.3 案例:消息堆积的治理 233
8.3 小结 235
第9章 RabbitMQ高阶 237
9.1 存储机制 238
9.1.1 队列的结构 240
9.1.2 惰性队列 243
9.2 内存及磁盘告警 245
9.2.1 内存告警 246
9.2.2 磁盘告警 249
9.3 流控 250
9.3.1 流控的原理 250
9.3.2 案例:打破队列的瓶颈 253
9.4 镜像队列 263
9.5 小结 269
第10章 网络分区 270
10.1 网络分区的意义 271
10.2 网络分区的判定 272
10.3 网络分区的模拟 275
10.4 网络分区的影响 279
10.4.1 未配置镜像 279
10.4.2 已配置镜像 282
10.5 手动处理网络分区 284
10.6 自动处理网络分区 289
10.6.1 pause-minority模式 289
10.6.2 pause-if-all-down模式 290
10.6.3 autoheal模式 291
10.6.4 挑选哪种模式 292
10.7 案例:多分区情形 293
10.8 小结 296
第11章 RabbitMQ扩展 297
11.1 消息追踪 298
11.1.1 Firehose 298
11.1.2 rabbitmq_tracing插件 301
11.1.3 案例:可靠性检测 305
11.2 负载均衡 310
11.2.1 客户端内部实现负载均衡 312
11.2.2 使用HAProxy实现负载均衡 314
11.2.3 使用Keepalived实现高可靠负载均衡 318
11.2.4 使用Keepalived LVS实现负载均衡 325
11.3 小结 330
附录A 集群元数据信息示例 331
附录B /api/nodes接口详细内容 333
附录C 网络分区图谱 336