百道网
 您现在的位置:Fun书 > 深入RabbitMQ
深入RabbitMQ


深入RabbitMQ

作  者:[美]Gavin,M.,Roy(加文罗伊)

译  者:汪佳南 郑天民

出 版 社:电子工业出版社

出版时间:2018年06月

定  价:79.00

I S B N :9787121341809

所属分类: 专业科技  >  计算机/网络  >  人工智能    

标  签:

[查看微博评论]

分享到:

TOP内容简介

《深入RabbitMQ》对RabbitMQ 这一业界主流的消息中间件做了全面介绍,给出了如何使用RabbitMQ 构建消息通信系统的方法和实践。《深入RabbitMQ》从AMQP 协议出发,深入介绍各种消息属性,给出RabbitMQ 在发送和消费消息上的特性和佳实践,并阐述基于RabbitMQ 所特有的交换器组件实现灵活的消息路由机制。同时,本书也讨论了如何利用RabbitMQ 强大的集群机制实现分布式环境下的消息通信,并展示了如何在RabbitMQ中,使用其他传输协议以及数据库集成等功能来实现各种定制化需求。

《深入RabbitMQ》的读者对象为从事互联网行业中各种分布式和服务化系统开发的研究人员、高等院校计算机相关专业的研究生和本科生,以及广大的IT 爱好者。

 

TOP作者简介

Gavin M. Roy 是一位积极的开源传播者和倡导者,自20 世纪90 年代中期就一直活跃在互联网和企业级技术之中。

 

TOP目录

第一篇  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

TOP书摘

译者序

当下互联网行业中的各种分布式和服务化系统的开发本质上就是解决一个问题,即系统如何进行拆分和集成。服务拆分需要用到面向领域思想,而服务集成则可以采用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 月于杭州

TOP 其它信息

页  数:252

开  本:16

加载页面用时:42.4863