新書推薦:
《
突破不可能:用特工思维提升领导力
》
售價:HK$
77.3
《
王阳明大传:知行合一的心学智慧(精装典藏版)
》
售價:HK$
221.8
《
失衡与重塑——百年变局下的中国与世界经济
》
售價:HK$
132.2
《
南方谈话:邓小平在1992
》
售價:HK$
80.6
《
纷纭万端 : 近代中国的思想与社会
》
售價:HK$
109.8
《
中国古代文体形态研究(第四版)(中华当代学术著作辑要)
》
售價:HK$
168.0
《
朋党之争与北宋政治·大学问
》
售價:HK$
99.7
《
甲骨文丛书·波斯的中古时代(1040-1797年)
》
售價:HK$
88.5
|
編輯推薦: |
大部分现代分布式应用的核心就是队列。它提供了缓存、优先级区分和消息路由的能力。RabbitMQ是一款高性能的消息代理服务器,基于高级消息队列协议。它经受住了实践的检验,足够快速,足够强大,几乎可以满足所有消息投递的需要。仅需要一些简单的设置,就能立即使用它管理低级别服务通信、应用集成和分布式系统的消息路由。本书是构建和维护基于消息的应用程序的实用指南。本书详细介绍了RabbitMQ,其中重点介绍了它的工作机制。不论是简单的网络服务,还是复杂的分布式设计,都可以从中找到真实系统的示例与详细解释。还可以从中领略到核心架构决策和有效运营管理流程开发所需的深刻见解。 具体内容包括: ◎AMQP协议(Advanced Message QueueingProtocol) ◎使用MQTT、Stomp和HTTP进行通信◎非常有价值的故障诊断技术 ◎数据库集成本书适合那些对面向消息的系统有一定基础的开发者阅读。
|
內容簡介: |
本书对 RabbitMQ 这一业界主流的消息中间件做了全面介绍,给出了如何使用 RabbitMQ 构建消息通信系统的方法和实践。本书从 AMQP 协议出发,深入介绍各种消息属性,给出 RabbitMQ 在发送和消费消息上的特性和*实践,并阐述基于 RabbitMQ 所特有的交换器组件实现灵活的消息路由机制。同时,本书也讨论了如何利用 RabbitMQ 强大的集群机制实现分布式环境下的消息通信,并展示了如何在 RabbitMQ中,使用其他传输协议以及数据库集成等功能来实现各种定制化需求。本书的读者对象为从事互联网行业中各种分布式和服务化系统开发的研究人员、高等院校计算机相关专业的研究生和本科生,以及广大的 IT 爱好者。
|
關於作者: |
Gavin M. Ray是一位积极主动的开源传播者和倡导者,自20世纪90年代中期以来一直从事互联网和企业技术方面的工作。技术编辑james Titcumb是一个自由开发者、培训师、演讲者,并且是开源项目积极贡献者。
汪佳南,拥有10年以上软件开发经验。对编程情有独钟,对产品设计很感兴趣,始终坚信技术可以改变世界。译有《RabbitMQ实战 高效部署分布式消息队列 》《深入理解 Redis》等知名图书。
|
目錄:
|
目 录
第一篇 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-idreserved ............................................................ 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
|
內容試閱:
|
译者序
当下互联网行业中的各种分布式和服务化系统的开发本质上就是解决一个问题,即系统如何进行拆分和集成。服务拆分需要用到面向领域思想,而服务集成则可以采用RPC、REST、消息通信等多种技术体系。从软件设计角度讲,无论是RPC 还是REST 都存在一定的耦合度问题。耦合度包括技术耦合、空间耦合和时间耦合等不同的表现形式,而消息通信机制能够降低这几种耦合度。
消息通信机制在消息发送方和消息接收方之间添加了存储转发(Store and Forward)功能。通过存储转发功能,消息发送方和消息接收方之间并不需要知晓对方的存在,也不需要同时在线,更不会限制必须采用同样的实现技术。紧耦合的单阶段远程方法调用因而转变成松耦合的两阶段过程,技术、空间和时间上的约束凭借中间层得到显著缓解。
然而消息通信机制并没有想象的那么简单。我们需要在消息的生产者和消费者之间建立有效的通信链路并确定双方的通信协议。消息的消费者通常采取主动拉取和被动消费这两
种模式实现消息消费;同时,出于稳定性的考虑,消费者还需要提供限流的能力。消息发送方的逻辑则相对简单,一旦消息发送出去之后,它将依赖路由规则,最终投递给符合条件的一个或多个消费者。这些构成了消息通信机制所应该具备的核心组件。
围绕消息通信机制的这些核心组件,业界存在一批关于消息通信的设计规范。而基于这些规范,不同厂商也提供了多种消息通信系统实现方案。本书所介绍的是基于高级消息队列协议(Advanced Message Queuing Protocol,AMQP)规范的RabbitMQ,在内容上详细阐述了RabbitMQ 的以下几个主题:
● AMQP 规范以及消息定义。
● 消息发送的过程以及可靠消息投递机制。
● 消息消费的过程以及消费者性能优化方法。
● 交换器组件以及消息路由机制。
● RabbitMQ 分布式集群构建。
● RabbitMQ 在系统集成上的具体应用。
目前,RabbitMQ 在各大互联网公司中应用十分广泛。通过RabbitMQ 所提供的丰富的交互API、友好的管理界面以及与生俱来的分布式特性,我们可以轻松构建一个强大的消息通信系统。然而消息通信系统的构建一方面降低了耦合性,另一方面也不可避免地引入了复杂性。如果使用不当,反而会引发各种问题。本书深入分析消息通信的各个方面,不仅介绍了RabbitMQ 的各项基本功能,更为重要的是提供了一系列面向实战的最佳实践,可以作为广大技术人员的开发指南。
在整个翻译过程中,我们首先要感谢张春雨和顾慧芳编辑的辛苦工作,是你们的细心指导才让本书得以最终呈现给读者。其次要感谢我们的家人和朋友,没有你们的体谅和关怀,我们无法专心致志工作。最后要感谢这段经历,本书是我们首次尝试以合译的方式来完成的,当中充满了乐趣和挑战。
本书第1 章至第5 章是由郑天民负责翻译的,第6 章至第10 章是由汪佳南负责翻译的。由于时间仓促,译者水平和经验有限,书中难免有欠妥和错误之处,恳请读者批评指正。
郑天民、汪佳南
2018 年3 月于杭州
序 言
当Manning Publications 于2012 年4 月发布《RabbitMQ 实战》一书时,RabbitMQ 迅速普及。时至今日,RabbitMQ 已然成为消息代理服务器世界的领导者之一,并且是各种应用程序应用场景的理想之选。通过分布式应用程序助力通信,在面向服务体系结构中采用微服务,并实现CQRS 和事件源组件的逻辑分离,这都是一些常见的RabbitMQ 用法。通过对AMQP 协议结构的研究,对各种交换器的逐步探索,以及对性能方面的考察等事项,我们以全新的视角对RabbitMQ 本身进行深入探索。《深入RabbitMQ》一书旨在将你对RabbitMQ 的理解提升至新的水平,使你能在实际应用中进一步应用这些原理。
致 谢
本书写作并非一蹴而就。首先要感谢我们的家人和朋友,他们孜孜不倦地陪伴在左右,毫无怨言,特别是傍晚的那些咖啡让我们坚持不懈地编写这样一本书。再次说声感谢!
感谢《RabbitMQ 实战》(2012 年4 月由Manning Publications 出版) 的作者AlvaroVidela 和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 Prez 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 集成的方式。
轻松注册成为博文视点社区用户(www.broadview.com.cn),扫码直达本书页面。
● 下载资源:本书如提供示例代码及资源文件,均可在下载资源处下载。
● 提交勘误:您对书中内容的修改意见可在提交勘误处提交,若被采纳,将获赠博文视点社区积分(在您购买电子书时,积分可用来抵扣相应金额)。
● 交流互动:在页面下方读者评论处留下您的疑问或观点,与我们和其他读者一同学习交流。
页面入口:http:www.broadview.com.cn34180
关于作者
Gavin M. Roy 是一位积极的开源传播者和倡导者,自20 世纪90 年代中期就一直活跃在互联网和企业级技术之中。
关于封面
本书封面上的图片为来自克罗地亚斯里耶姆的Mikanovac 的男士。该插图摘自19世纪中期克罗地亚传统服饰专辑。这幅出自Nikola Arsenovic 之手的作品于2003 年在克罗地亚斯普利特的民族博物馆展出。这些插图是从斯普利特民族博物馆的一位乐于助人的图书管理员手中获得的。它位于镇中心的中世纪罗马核心:大约公元304 年左右罗马皇帝退休后宫殿的废墟,并伴有服饰和日常生活的描述。
着装规范和生活方式在过去的200 年里历经变化。当时如此丰富多彩的地区多样性已不复存在。现在很难区分不同大陆的居民,更不用说不同的小村庄或仅隔几英里的小镇了。
|
|