RabbitMQ(五) ——话题模式

RabbitMQ(五)——话题模式

(原创内容,转载请注明来源,谢谢)

一、概述

话题模式(topic)可以让队列绑定某一类型的消息,而不仅仅是direct模式下的具体的消息。即,其允许绑定的信息采用通配符。可以保证多重条件下,仍具备灵活性。但是,当routing key没有匹配时,仍然会丢弃消息。

话题模式如下图所示:

二、话题模式的交换机(topic exchange)

该模式下,routing key更加灵活,支持通配符。但是,并没有正则表达式那么强大的匹配,其主要支持两个通配符。匹配是以单词作为一个整体,每个单词由点(.)隔开。通配符如下:

1)*

星号表示匹配一个单词。

2)#

井号表示匹配0个或任意个单词。

RabbitMQ规定,每个routing key的大小不能超过255字节(bytes),因此在范围内,可以任意给key取名。

另外,fanout和direct可以看成是特殊的topic。

1)fanout

当topic模式下,每个队列的routing key都就用一个#,则任意内容都会发送给全部的队列,则和fanout是一致的。

2)direct

当topic模式下,每个队列的routing key都不用*、#这两个通配符,则每个队列都只监听精准的routing key,则和direct是一致的。

三、匹配实例

如话题模式的图片中,队列q1绑定*.orange.*,q2绑定*.*.rabbit和lazy.#,则三个单词的情况下,中间单词是orange的会发给q1,最后一个单词是rabbit的会发给q2。任意lazy开头的单词(不管总单词数)都会发给q2。

例如,当routing key是:

1)quick.orange.rabbit发送给q1

2)lazy.orange.elephant发送给q1和q2

3)lazy.brown.fox 发给q2

4)quick.red.rabbit发给q2

5)orange 谁都不发送,被丢弃

6)lazy.orange.male.rabbit发给q2

——written by linhxx 2017.08.23

原文发布于微信公众号 - 决胜机器学习(phpthinker)

原文发表时间:2017-08-23

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

GO语言并发编程之互斥锁、读写锁详解

在本节,我们对Go语言所提供的与锁有关的API进行说明。这包括了互斥锁和读写锁。我们在第6章描述过互斥锁,但却没有提到过读写锁。这两种锁对于传统的并发程序来说都...

2675
来自专栏H2Cloud

fflua更新-增加对引用的支持

简介: fflua 发布了有段时间了,很多网友都用了,并且提供了一些很好的反馈。其中一个就是c++接口注册到lua中时,对引用的支持。这样使用起来更加方便。 原...

2836
来自专栏IMWeb前端团队

node中常见的10个错误

非原创,格式不太整齐。 错误 #1:阻塞事件循环 JavaScript在 Node.js (就像在浏览器一样) 提供单线程执行环境。这意味着你的程序不能同时执行...

2306
来自专栏追不上乌龟的兔子

Python3.7的新API:asyncio.run()

Python3.7的正式版本已经发布有一段时间了,出了内置的breakpoint()断点函数,颇受争议的dataclass,自定义模块里的__getattr__...

3066
来自专栏加米谷大数据

Redis数据类型及应用场景

通常我们都把数据存到关系型数据库中,但为了提升应用的性能,我们应该把访频率高且不会经常变动的数据缓存到内存中。Redis 没有像 MySQL 这类关系型数据库那...

832
来自专栏Golang语言社区

GO语言并发编程之互斥锁、读写锁详解

在本节,我们对Go语言所提供的与锁有关的API进行说明。这包括了互斥锁和读写锁。我们在第6章描述过互斥锁,但却没有提到过读写锁。这两种锁对于传统的并发程序来说都...

3427
来自专栏WindCoder

Java设计模式学习笔记—单例模式(上)

文章最后“Java设计模式笔记示例代码整合”为本系列代码整合,所有代码均为个人手打并运行测试,不定期更新。本节内容位于其Singleton包(package)中...

482
来自专栏蛋未明的专栏

Node.js如何处理健壮性

1945
来自专栏Android机器圈

算法:插入排序详解--为什么从第二项开始,而不是第一项

PS:对于插入排序这个算法,我们想要看清他就要从它的应用场景,概念,用法等去了解它,实现代码就那么几行,但有时还真是不好理解,比如说为什么从第二项开始,而不是从...

3746
来自专栏Golang语言社区

GO语言并发编程之互斥锁、读写锁详解

在本节,我们对Go语言所提供的与锁有关的API进行说明。这包括了互斥锁和读写锁。我们在第6章描述过互斥锁,但却没有提到过读写锁。这两种锁对于传统的并发程序来说都...

3834

扫码关注云+社区