专栏首页Node Python Go全栈开发RabbitMQ 入门系列(三)

RabbitMQ 入门系列(三)

RabbitMQ 入门系列(一)讲述了 RabbitMQ 有关的基本概念。RabbitMQ 入门系列(二)通过两个示例实现了基本的消息投递和接收功能,但示例中使用的均是默认的交换器,且并未对其进行深入描述,本文则将会继续通过示例重点讲述交换器的几种不同类型。

01

回顾

我们再来回顾一遍 RabbitMQ 的一般使用流程:

1、建立到 RabbitMQ 的连接。

2、创建信道。

3、声明交换器。

4、声明队列。

5、绑定交换器和队列。

6、消息操作。生产者:生成并发布消息;消费者:订阅并消费消息。

7、关闭信道。

8、关闭连接。

交换器 Exchange 的四种类型:

1、fanout:广播,将消息传递给所有该交换器绑定的队列。

2、direct :直连,将消息传递给 Routing Key 与 Binding Key完全一致的队列中,可以有多个队列。

3、topic :模糊匹配,Binding Key 是一个可以用符号 . 分隔单词的字符串,模糊匹配下,符号 * 用于匹配任意一个单词,符号 # 用于匹配零个或多个单词。

4、headers :根据消息中具体内容的 header 属性来作为路由规则的,这种类型对资源消耗太大且很少使用,本文不对此类型进行讲述。

02

Publish/Subscribe

此示例重点关注交换器 Exchange 的 fanout 类型。

消费者接收消息(receive_log.js):

生产者投递消息(emit_log.js):

fanout 类型的交换器会直接将消息广播到所有与其绑定的队列,所以绑定交换器与队列时无需指定 binding key (空字符串),投递消息时也无需指定 routing key (空字符串)。

交换器与队列一样具有 durable 属性,此属性表示是否对交换器进行持久化,也就是保存到磁盘上,一旦 RabbitMQ 服务器重启,持久化的交换器可以被重新恢复。

这里在声明队列时,我们使用的是一种临时的队列,我们无需指定该队列的名称,RabbitMQ 会自动为其生成一个随机的名称,同时 exclusive 属性表明该队列是否只会被当前连接使用,也就是说连接一旦关闭则此队列也会被删除。

03

Routing

此示例重点关注交换器 Exchange 的 direct 类型。

消费者接收消息(receive_log_direct.js):

生产者投递消息(emit_log_direct.js):

交换器为 direct 类型,路由规则是 routing key 与 binding key 完全一致,这就是说与上例 fanout 类型不同的是,我们必须指定绑定交换器和队列的 binding key ,投递消息时也需要指定路由的 routing key 。其余地方基本一致。

04

Topics

此示例重点关注交换器 Exchange 的 topic 类型。

消费者接收消息(receive_log_topic.js):

生产者投递消息(emit_log_topic.js):

交换器的 topic 类型,只需注意模糊匹配的规则即可,绑定交换器和队列的 binding key 以符号 . 将字符串分隔为不同的单词(不一定是真实的单词,理解为一个部分就行了),符号 * 用于匹配任意一个单词,符号 # 用于匹配零个或多个单词。

05

结语

其实你会发现本文三个示例中的大部分地方都是类似的,唯一不同的地方就是不同的交换器类型需要对 binding key 和 routing key 进行不同的处理。通过本文了解了不同的交换器类型,有助于你在此基础上进行具体的路由规则设计。

本文分享自微信公众号 - Node Python Go全栈开发(gh_9ccbe5e0dfb3),作者:rifewang

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-03-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • RabbitMQ 入门系列(四)

    RabbitMQ 入门系列(一)讲了基本概念。RabbitMQ 入门系列(二)讲了简单入门使用。RabbitMQ 入门系列(三)讲了交换器的不同类型。本文将会讲...

    凌虚
  • RabbitMQ 入门系列(一)

    消息中间件 MQ(也称消息队列)的基本功能是传递和转发消息,其最重要的作用是能够解耦业务及系统架构,可以说是一个系统发展壮大到一定阶段绕不开的东西。

    凌虚
  • GitHub Actions 指南

    GitHub Actions 使你可以直接在你的 GitHub 库中创建自定义的工作流,工作流指的就是自动化的流程,比如构建、测试、打包、发布、部署等等,也就是...

    凌虚
  • RabbitMQ系列笔记广播模式和路由模式

    上一节介绍了简单的工作模式,即一个队列可以被多个消费者进行消费,只有一条消息被送到消费者,采用公平调度的方式,在以往的例子中似乎我们还没用到交换器进行发送消息,...

    陌无崖
  • pandas数据读取的问题记录

    最近发现pandas的一个问题,记录一下: 有一组数据(test.txt)如下:

    sladesal
  • Cell V2详解

    注: 本文之前已经在腾讯云tstack上发布过了https://cloud.tencent.com/developer/article/1473057,这里自己...

    jiang
  • 在SAP CAL(Cloud Application Library)上搭建ABAP HANA系统

    在结果里选择SAP NetWeaver AS ABAP and SAP BW 7.5 SP01 on SAP HANA SP10,点击Create instan...

    Jerry Wang
  • SAP Cloud for Customer(C4C)的一些学习资料

    1. 登录https://help.sap.com, 搜索栏里输入cloud for customer:

    Jerry Wang
  • SAP Cloud for Customer(C4C)的一些学习资料

    1. 登录https://help.sap.com, 搜索栏里输入cloud for customer:

    Jerry Wang
  • SAP Cloud for Customer(C4C)的一些学习资料

    1. 登录https://help.sap.com, 搜索栏里输入cloud for customer:

    Jerry Wang

扫码关注云+社区

领取腾讯云代金券