发表于2024-12-22
《深入RabbitMQ》对RabbitMQ 这一业界主流的消息中间件做了全面介绍,给出了如何使用RabbitMQ 构建消息通信系统的方法和实践。《深入RabbitMQ》从AMQP 协议出发,深入介绍各种消息属性,给出RabbitMQ 在发送和消费消息上的特性和佳实践,并阐述基于RabbitMQ 所特有的交换器组件实现灵活的消息路由机制。同时,本书也讨论了如何利用RabbitMQ 强大的集群机制实现分布式环境下的消息通信,并展示了如何在RabbitMQ中,使用其他传输协议以及数据库集成等功能来实现各种定制化需求。
《深入RabbitMQ》的读者对象为从事互联网行业中各种分布式和服务化系统开发的研究人员、高等院校计算机相关专业的研究生和本科生,以及广大的IT 爱好者。
Gavin M. Roy 是一位积极的开源传播者和倡导者,自20 世纪90 年代中期就一直活跃在互联网和企业级技术之中。
第一篇 RabbitMQ和应用程序体系结构
第1章 RabbitMQ基础 3
1.1 RabbitMQ特性以及好处 4
1.1.1 RabbitMQ与Erlang 5
1.1.2 RabbitMQ与AMQP 6
1.2 谁在使用RabbitMQ,在怎么用 7
1.3 松耦合架构的优势 8
1.3.1 解耦你的应用 10
1.3.2 解耦数据库写入 11
1.3.3 无缝添加新功能 12
1.3.4 复制数据与事件 12
1.3.5 多主(Multi-Master)互联化数据与事件 13
1.3.6 高级消息队列模型 14
1.4 小结 16
第2章 使用AMQ协议与Rabbit进行交互 18
2.1 AMQP作为一种RPC传输机制 19
2.1.1 启动会话 20
2.1.2 调整正确的信道 20
2.2 AMQP RPC帧结构 21
2.2.1 AMQP帧组件 21
2.2.2 帧类型 22
2.2.3 将消息编组成帧 23
2.2.4 方法帧结构 24
2.2.5 内容头帧 26
2.2.6 消息体帧 26
2.3 使用协议 27
2.3.1 声明交换器 27
2.3.2 声明队列 28
2.3.3 绑定队列到交换器 29
2.3.4 发布消息到RabbitMQ 29
2.3.5 从RabbitMQ中消费消息 30
2.4 用Python编写消息发布者 32
2.5 从RabbitMQ中获取消息 36
2.6 小结 37
第3章 消息属性详解 38
3.1 合理使用属性 39
3.2 使用content-type属性创建显式的消息契约 41
3.3 通过gzip和content-encoding属性压缩消息大小 43
3.4 使用message-id和correlation-id引用消息 45
3.4.1 Message-id 45
3.4.2 Correlation-id 45
3.5 创建时间:timestamp属性 46
3.6 消息自动过期 47
3.7 使用delivery-mode平衡速度和安全性 48
3.8 使用app-id和user-id验证消息来源 49
3.8.1 app-id 50
3.8.2 user-id 51
3.9 使用type属性获取明细 51
3.10 使用reply-to属性实现动态工作流 52
3.11 使用消息头自定义属性 53
3.12 优先级属性 54
3.13 不能使用的属性:cluster-id/reserved 54
3.14 小结 55
第4章 消息发布的性能权衡 58
4.1 平衡投递速度与可靠投递 59
4.1.1 如果没有保证机制我们能期待什么 60
4.1.2 使用mandatory设置,RabbitMQ将不接受不可路由消息 62
4.1.3 发布者确认作为事务的轻量级替代方法 64
4.1.4 使用备用交换器处理无法路由的消息 66
4.1.5 基于事务的批量处理 68
4.1.6 使用HA队列避免节点故障 70
4.1.7 HA队列与事务 72
4.1.8 通过设置delivery-mode为2将消息持久化到磁盘 72
4.2 RabbitMQ回推 75
4.2.1 使用rabbitpy来检测连接状态 77
4.2.2 使用管理API管理连接状态 77
4.3 小结 78
第5章 消费消息,避免拉取 79
5.1 对比Basic.Get 和Basic.Consume 80
5.1.1 Basic.Get 80
5.1.2 Basic.Consume 82
5.2 优化消费者性能 84
5.2.1 使用no-ack模式实现更快的吞吐量 85
5.2.2 通过服务质量设置控制消费者预取 86
5.2.3 消费者使用事务 89
5.3 拒绝消息 90
5.3.1 Basic.Reject 90
5.3.2 Basic.Nack 91
5.3.3 死信交换器 92
5.4 控制队列 94
5.4.1 临时队列 94
5.4.2 永久队列 97
5.4.3 任意队列设置 99
5.5 小结 99
第6章 消息路由模式 101
6.1 通过direct交换器路由消息 102
6.1.1 创建应用架构 103
6.1.2 创建RPC工作者 107
6.1.3 编写简单的RPC发布者 110
6.2 通过fanout交换器广播消息 115
6.2.1 修改面部检测消费者 116
6.2.2 创建一个简单的图片哈希消费者 117
6.3 使用topic交换器有选择地路由消息 119
6.4 使用headers交换器有选择地路由消息 122
6.5 交换器性能基准 124
6.6 交换器间路由 125
6.7 使用一致性哈希交换器路由消息 127
6.8 小结 131
第二篇 管理数据中心或云中的RabbitMQ
第7章 RabbitMQ集群 135
7.1 集群简介 136
7.1.1 集群和管理界面 137
7.1.2 集群节点类型 138
7.1.3 集群和队列行为 139
7.2 集群设置 142
7.2.1 虚拟机设置 143
7.2.2 向集群中添加节点 144
7.3 小结 147
第8章 跨集群的消息分发 148
8.1 联合交换器和联合队列 149
8.1.1 联合交换器 149
8.1.2 联合队列 152
8.2 创建RabbitMQ虚拟机 153
8.2.1 创建首个实例 153
8.2.2 复制EC2实例 159
8.3 连接上游节点 162
8.3.1 定义联合中的上游节点 162
8.3.2 定义策略 164
8.3.3 利用上游集合 167
8.3.4 双向联合交换器 170
8.3.5 使用联合来升级集群 171
8.4 小结 173
第三篇 集成与定制
第9章 使用替代协议 177
9.1 MQTT和RabbitMQ 178
9.1.1 MQTT协议 178
9.1.2 通过MQTT发送消息 182
9.1.3 MQTT订阅者 184
9.1.4 MQTT插件配置 187
9.2 STOMP和RabbitMQ 189
9.2.1 STOMP协议 190
9.2.2 发布消息 191
9.2.3 消费消息 195
9.2.4 配置STOMP插件 198
9.2.5 在Web浏览器中使用STOMP 199
9.3 通过HTTP进行无状态发布 200
9.3.1 statelessd的由来 200
9.3.2 使用statelessd 201
9.3.3 运营架构 202
9.3.4 通过statelessd来发布消息 203
9.4 小结 203
第10章 数据库集成 205
10.1 PostgreSQL扩展:pg_amqp 206
10.1.1 安装pg_amqp扩展 207
10.1.2 配置pg_amqp扩展 209
10.1.3 通过pg_amqp发送消息 210
10.2 监听PostgreSQL通知 212
10.2.1 安装PostgreSQL LISTEN交换器 213
10.2.2 基于策略的配置 215
10.2.3 创建交换器 217
10.2.4 创建并绑定测试队列 217
10.2.5 通过NOTIFY发送消息 218
10.3 将消息存入InfluxDB中 219
10.3.1 InfluxDB的安装与设置 220
10.3.2 安装InfluxDB存储交换器 222
10.3.3 创建测试交换器 223
10.3.4 测试交换器 224
10.4 小结 227
附录 准备就绪 228
A.1 安装VirtualBox 228
A.2 安装Vagrant 230
A.3 设置Vagrant虚拟机 233
A.4 确认安装 234
A.5 小结 236
序言
当Manning Publications 于2012 年4 月发布《RabbitMQ 实战》一书时,RabbitMQ 迅速普及。时至今日,RabbitMQ 已然成为消息代理服务器世界的领导者之一,并且是各种应用程序应用场景的理想之选。通过分布式应用程序助力通信,在面向服务体系结构中采用微服务,并实现CQRS 和事件源组件的逻辑分离,这都是一些常见的RabbitMQ 用法。
通过对AMQP 协议结构的研究,对各种交换器的逐步探索,以及对性能方面的考察等事项,我们以全新的视角对RabbitMQ 本身进行深入探索。《深入RabbitMQ》一书旨在将你对RabbitMQ 的理解提升至新的水平,使你能在实际应用中进一步应用这些原理。
致谢
本书写作并非一蹴而就。首先要感谢我们的家人和朋友,他们孜孜不倦地陪伴在左右,毫无怨言,特别是傍晚的那些咖啡让我们坚持不懈地编写这样一本书。再次说声感谢!感谢《RabbitMQ 实战》(2012 年4 月由Manning Publications 出版) 的作者Alvaro Videla 和Jason J.W. Williams,是他们激发了无数开发者对RabbitMQ 的兴趣、开拓了大家的眼界,为日后的研究奠定了基础。
感谢我们的开发编辑Karen,正是她在这段时间里付出的无尽耐心和理解,再加上整个Manning 团队所有人的巨大努力,才将我们推向成功。这份艰苦卓绝的工作历经反复打磨,最终成就了本书,我们心存感恩!
同样感谢技术校对者Karsten Strøbæk,他对本书的贡献非常大。还要感谢以下审稿人,他们的意见对本书的帮助同样重要。他们是Phillip Warner、Jerry Kuch、Nadia Saad Noori、Bruce Snyder、Robert Kielty、Milos Milivojevic、Arathi Maddula、Ian Dallas、George Harley、Dimitri Aivaliotis、Hechen Gao、Stefan Turalski、Andrew Meredith、Artem Dayneko、David Paccoud、Barry Alexander、Biju Kunjummen、Adolfo Pérez Álvarez、Brandon Wilhite、David Pull 和Ray Lugo。
还有许多朋友也以不同的方式为本书做出了贡献。我们无法提及每个人的名字,否则整本书都可能装不下。总之,非常感谢那些曾经帮助我们成就这本书的朋友们!
关于本书
RabbitMQ 是采用Erlang 编写的开源消息代理服务器,目前隶属于Pivotal Software。它基于AMQP 开放协议,官方客户端库提供了基于Java、.NET 和Erlang 版本,以及大多数其他流行的编程语言编写的库。
本书力求和最新版的RabbitMQ 3.6.3 保持一致。由于RabbitMQ 本身的发布计划并不确定,在你拿到本书时RabbitMQ 很可能已经发布了新的版本。别担心,根据我们的经验,RabbitMQ 极少会在新版本中削减特性,而只会增加新特性并修复问题。
本书中使用的代码示例是采用Python 编写的。如果你没有安装Python 和RabbitMQ,或者你只是想做实验而不想安装完整的环境的话,我们编写了有关如何配置安装Vagrant box 的教程,里面预装了所有需要的程序。请确保你查看了附录,清楚如何安装并运行。
路线图
第1 章讨论了RabbitMQ 的基础:RabbitMQ 众多的功能以及RabbitMQ 的基础,高级消息通信队列模型。
第2 章探讨了AMQ 协议,讲解了帧结构,以及从RabbitMQ 收发消息时底层处理逻辑。
第3 章的内容更为深入,讲解了消息属性,包括消息头以及如何在应用程序中使用它们。我们可以利用消息头向消息添加重要的元数据信息,例如content-type 以及编码类型。
第4 章重点讲解了性能权衡。每种级别的保证都会对应用程序的性能产生影响。本章将介绍这些参数并帮助你在保证消息可靠性的环境所需与快速消息投递之间达到平衡,这就是所谓的金发姑娘原则(Goldilocks Principle)。
第5 章探索了消息消费的概念,讲解了Basic.Get 和Basic.Consume 两者之间在底层上根本上的差异,以及通常情况下为什么使用Basic.Consume 会更好。本章还讲解了消息预取(prefetching )、服务质量、消息确认、死信交换器、临时队列以及消息过期。
第6 章深入讲解了RabbitMQ 中的四种核心交换器类型,以及如何在应用架构中选择使用,并从中受益。
第7 章着眼于如何通过集群管理来扩展RabbitMQ,集群中的节点故障恢复,以及在应用集群环境时更进一步的性能考虑。
第8 章的主要内容是集群的核心概念, 包括互联(federate) 交换器和队列,将RabbitMQ 集群与AWS 进行集成,以及各种策略的应用。
第9 章讲解了与RabbitMQ 通信的其他几种方式:使用MQTT 和STOMP 等替代协议,或者基于statelessd 的HTTP 协议进行消息通信。
最后,第10 章介绍了数据库集成方面的内容,讲解了将PostgreSQL、InfluxDB 与RabbitMQ 集成的方式。
深入RabbitMQ 下载 mobi pdf epub txt 电子书 格式 2024
深入RabbitMQ 下载 mobi epub pdf 电子书深入RabbitMQ mobi epub pdf txt 电子书 格式下载 2024