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 条评论
登录 后参与评论

相关文章

来自专栏性能与架构

ES6 新特性示例

JS的新版本 ES6/ECMAScript2015 在去年出来了,我们现在普遍使用的ES5是在2009年出来的,相隔这么多年,变化比较大,添加了一些很好用的特性...

2686
来自专栏Python爱好者

Java基础笔记11

1044
来自专栏云计算教程系列

如何在Ubuntu 16.04上设置Jupyter Notebook以运行IPython

IPython是Python的交互式命令行界面。Jupyter Notebook提供了多种语言的交互式Web界面,包括IPython。

2964
来自专栏CSDN技术头条

如何深入 Python 虚拟机追查 HTTP 服务 core dump 导致 502 的问题

作者 | 今日头条技术团队 概述 今日头条目前大部分 Python 的 HTTP 服务都是用 uWSGI 托管 Python 多进程的 Django 或者 Fl...

2287
来自专栏java一日一条

Java 编程要点之并发(Concurrency)详解

计算机用户想当然地认为他们的系统在一个时间可以做多件事。他们认为,他们可以工作在一个字处理器,而其他应用程序在下载文件,管理打印队列和音频流。即使是单一的应用程...

672
来自专栏Python入门

Python存取文件方法有很多,但是这四种真的算的上是骚操作了

在不需要借助任何外界库的前提下,python内置方法其实也可以完成我们需要的文件存取任务,这里主要介绍几种python内置方法的使用方式,最后再给出一个实际案例...

1776
来自专栏JAVA高级架构

《深入理解java虚拟机-高效并发》读书笔记

Java内存模型与线程 概述   多任务处理在现代计算机操作系统中几乎已是一项必备的功能,多任务运行是压榨手段,就如windows一样,我们使劲的压榨它运行多个...

3197
来自专栏数据库

第七节 关联映射之多对多

本次用 MyBatis 实现多对多关联映射:一个学生可以选多门课,一个课也可以由多个学生选。 一、 数据库准备 为了测试方便,我们在这里新建一个数据库并取名my...

2425
来自专栏Android群英传

Gradle函数复用的一点实践

931
来自专栏后端技术探索

vim神奇高效功能--批量生成Sql实例

可以通过写代码,读取文件进行入库,无论用什么语言,这代码逻辑都很容易实现。唯一的问题是代码需要上线后执行,每次上线可是一个大工程,恐怕会被pm同学嘲笑说:“你这...

983

扫码关注云+社区