《深入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》听起来就非常有分量,让我对它充满了期待。我目前正在学习分布式系统的知识,而消息队列是其中不可或缺的一环。虽然市面上关于RabbitMQ的书籍不少,但很多都停留在入门介绍的层面,对于底层实现和高级应用的讲解比较有限。我希望这本书能够提供更深入的视角,让我理解RabbitMQ是如何工作的,比如它的交换机、队列、绑定等核心概念是如何协作的,消息在其中流转的细节又是怎样的。特别是关于消息的可靠性投递,如何避免消息丢失,如何处理重复消费的问题,这些都是我在学习过程中遇到的难点。书中如果能详细介绍RabbitMQ的插件机制,以及如何利用插件扩展其功能,那将是非常有价值的。我还需要了解如何在复杂的网络环境下保证消息的传输效率和稳定性,以及如何对RabbitMQ进行监控和故障排查。总而言之,我希望通过这本书,能够真正地“深入”RabbitMQ,掌握它背后的技术原理,并能将其灵活地应用到实际的开发和运维工作中,构建更加健壮和高效的分布式系统。
评分作为一名对技术充满好奇心的程序员,我总是喜欢挖掘工具背后的奥秘。《深入RabbitMQ》这个书名立刻吸引了我的注意。我对消息队列技术一直抱有浓厚的兴趣,尤其是RabbitMQ,它凭借其灵活的路由机制和丰富的特性,在业界有着广泛的应用。我希望这本书能够超越基础的API调用和配置说明,去探讨RabbitMQ的内部架构,例如它的消息存储机制、连接管理、集群同步等。我想知道在消息量巨大或者网络出现波动时,RabbitMQ是如何保证其稳定性和可用性的。书中关于死信队列、延迟队列等高级特性的讲解,如果能结合实际应用场景进行分析,那将对我大有裨益。此外,我对于如何优化RabbitMQ的性能,比如如何配置连接池、如何调整JVM参数、如何选择合适的序列化方式等,也充满了疑问。这本书如果能够提供一些性能测试的案例和调优的策略,那简直是锦上添花。我期待它能成为我学习RabbitMQ的“葵花宝典”,让我能更上一层楼,成为一名RabbitMQ的“资深玩家”。
评分这本《深入RabbitMQ》封面有一种沉静的力量,仿佛蕴藏着大海般深邃的知识。我是一名初入分布式系统领域的开发者,目前的项目中引入了消息队列来解耦服务,而RabbitMQ正是我们选择的技术栈。虽然目前的工作流程比较顺畅,但我总觉得对RabbitMQ的理解还停留在表面,很多时候只是按照文档或者教程来操作。我希望这本书能够帮助我建立起一个完整的知识体系,从最基础的AMQP协议讲起,逐步深入到RabbitMQ的各个组件和工作原理。特别是关于消息的传递保证,比如ACK机制、持久化策略,以及如何应对生产者和消费者都可能出现的异常情况,这些都是我非常关心的。书中如果能对比分析不同版本的RabbitMQ在特性和性能上的差异,或者提供一些实际生产环境中遇到的典型问题的解决方案,那我将感到非常幸运。我期待这本书能让我从一个“使用者”变成一个“理解者”,甚至是一个“优化者”,能够更好地驾驭这个强大的工具。
评分《深入RabbitMQ》这个书名,像一扇通往未知领域的大门,让我充满了探索的渴望。我对消息队列技术的热情,源于其在构建高可用、可伸缩的分布式系统中所扮演的关键角色。RabbitMQ以其强大的功能和灵活的配置,成为了许多项目的首选。然而,仅仅停留在“会用”的层面,往往会在遇到性能瓶颈或者复杂场景时捉襟见肘。我迫切希望这本书能够揭示RabbitMQ更深层次的运作机制,比如它如何高效地管理成千上万的连接,如何处理海量的消息,以及在分布式部署时如何保证数据的一致性和可用性。书中对于消息确认、流量控制、插件开发等方面的深入讲解,将是我的重点关注对象。我还希望书中能够提供一些关于RabbitMQ集成到各种主流开发框架(如Spring Boot、Node.js等)的实践经验,以及在实际项目中如何进行压力测试、性能监控和故障排除的详细指导。这本书,无疑是我希望成为一名RabbitMQ专家的必经之路。
评分这本《深入RabbitMQ》的封面设计简洁大气,深蓝色的背景搭配白色的RabbitMQ标志,给人一种专业而可靠的感觉。我是一名在公司负责消息队列系统运维的工程师,平时工作中经常会接触到RabbitMQ,但总觉得对它的理解还停留在“知道怎么用”的层面,很多时候遇到问题,只能靠查阅零散的资料和社区的讨论来解决,效率不高,而且总有种“知其然不知其所以然”的困惑。听同事推荐了这本书,说它对RabbitMQ的底层原理、架构设计以及各种高级特性都有非常深入的讲解,正好可以弥补我在这方面的知识盲区。我特别期待书中关于消息队列的各种模式,比如发布/订阅、工作队列、路由模式等,它们在实际应用中是如何发挥作用的,以及在不同场景下应该如何选择和配置,这些都是我工作中经常会遇到的难题。此外,书中关于消息持久化、集群部署、高可用性以及性能调优的章节,也是我非常感兴趣的部分。毕竟,稳定可靠且高效的消息队列是支撑整个分布式系统正常运行的关键。我希望通过阅读这本书,能够系统地梳理RabbitMQ的知识体系,掌握其核心技术,从而能够更从容地应对各种复杂的场景,提升工作效率,为公司的业务发展保驾护航。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.idnshop.cc All Rights Reserved. 静思书屋 版权所有