一、模式介绍

话题模式(Topic)基本思想和路由模式是一样的,只不过路由键支持模糊匹配,符号“#”匹配一个或多个词,符号“*”匹配不多不少一个词

话题模式相当于消息的模糊匹配,或者按照正则匹配。其中

# 是通配符,匹配一个或者多个单词

* 代表匹配一个单词

模式提醒:

当使用#来收消息时,会接收到所有的消息,这样和fanout模式一样了。

当routing key中不含*或者#时,则topic的模式退化为direct的一对一模式。

队列模型:

二、代码示例

发布者:

 #!/usr/bin/env python
import pika
import sys connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel() channel.exchange_declare(exchange='topic_logs',
exchange_type='topic') routing_key = ['#', "kern.critical", "A critical kernel error"]
for i in range(10):
message = '{} msg at : routing key {}'.format(i, routing_key[i % 3])
channel.basic_publish(exchange='topic_logs',
routing_key=routing_key[i % 3],
body=message)
print(" [x] Sent :%r" % (message))
connection.close()

消费者:

 import pika
import sys connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel() channel.exchange_declare(exchange='topic_logs',
exchange_type='topic') result = channel.queue_declare(exclusive=True)
queue_name = result.method.queue binding_key = "#" channel.queue_bind(exchange='topic_logs',
queue=queue_name,
routing_key=binding_key) print(' [*] Waiting for logs. To exit press CTRL+C') def callback(ch, method, properties, body):
print(" [x] %r:%r" % (method.routing_key, body)) channel.basic_consume(callback,
queue=queue_name,
no_ack=True) channel.start_consuming()

发布者输出:

[x] Sent :'0 msg at : routing key #'
[x] Sent :'1 msg at : routing key kern.critical'
[x] Sent :'2 msg at : routing key error.critical'
[x] Sent :'3 msg at : routing key #'
[x] Sent :'4 msg at : routing key kern.critical'
[x] Sent :'5 msg at : routing key error.critical'
[x] Sent :'6 msg at : routing key #'
[x] Sent :'7 msg at : routing key kern.critical'
[x] Sent :'8 msg at : routing key error.critical'
[x] Sent :'9 msg at : routing key #'

消费者输出:

all:可以看到接收到所有的消息

[*] Waiting for logs. To exit press CTRL+C
[x] '#':b'0 msg at : routing key #'
[x] 'kern.critical':b'1 msg at : routing key kern.critical'
[x] 'error.critical':b'2 msg at : routing key error.critical'
[x] '#':b'3 msg at : routing key #'
[x] 'kern.critical':b'4 msg at : routing key kern.critical'
[x] 'error.critical':b'5 msg at : routing key error.critical'
[x] '#':b'6 msg at : routing key #'
[x] 'kern.critical':b'7 msg at : routing key kern.critical'
[x] 'error.critical':b'8 msg at : routing key error.critical'
[x] '#':b'9 msg at : routing key #'

消费者“critical”,只接收含critical的消息

[*] Waiting for logs. To exit press CTRL+C
[x] 'kern.critical':b'1 msg at : routing key kern.critical'
[x] 'error.critical':b'2 msg at : routing key error.critical'
[x] 'kern.critical':b'4 msg at : routing key kern.critical'
[x] 'error.critical':b'5 msg at : routing key error.critical'
[x] 'kern.critical':b'7 msg at : routing key kern.critical'
[x] 'error.critical':b'8 msg at : routing key error.critical'

消费者“kern”,只接收含kern的消息

[*] Waiting for logs. To exit press CTRL+C
[x] 'kern.critical':b'1 msg at : routing key kern.critical'
[x] 'kern.critical':b'4 msg at : routing key kern.critical'
[x] 'kern.critical':b'7 msg at : routing key kern.critical'

三、队列信息

在管理页面上可以看到三个队列信息,routing key对应着三个队列的配置

python使用rabbitMQ介绍五(话题模式)的更多相关文章

  1. RabbitMQ详解(三)------RabbitMQ的五种模式

    RabbitMQ详解(三)------RabbitMQ的五种模式 1.简单队列(模式) 上一篇文章末尾的实例给出的代码就是简单模式. 一个生产者对应一个消费者!!! pom.xml ​ 必须导入Rab ...

  2. python使用rabbitMQ介绍一(生产-消费者模式)

    1 模式介绍 生产者-消费者模式是最简单的使用模式. 一个生产者P,给队列发送消息,一个消费者C来取队列的消息. 这里的队列长度不限,生产者和消费者都不用考虑队列的长度. 队列的模型图: 2 示例代码 ...

  3. python使用rabbitMQ介绍三(发布订阅模式)

    一.模式介绍 在前面的例子中,消息直接发送到queue中. 现在介绍的模式,消息发送到exchange中,消费者把队列绑定到exchange上. 发布-订阅模式是把消息广播到每个消费者,每个消费者接收 ...

  4. python使用rabbitMQ介绍二(工作队列模式)

    一模式介绍 第一章节的生产-消费者模式,是非常简单的模式,一发一收.在实际的应用中,消费者有的时候需要工作较长的时间,则需要增加消费者. 队列模型: 这时mq实现了一下几个功能: rabbitmq循环 ...

  5. python使用rabbitMQ介绍四(路由模式)

    一.模式介绍 路由模式,与发布-订阅模式一样,消息发送到exchange中,消费者把队列绑定到exchange上. 这种模式在exchange上添加添加了一个路由键(routing-key),生产者发 ...

  6. Python 操作rabbitmq中的confirm模式的错误

    今天使用rabbitmq的confirm模式,书上介绍的是pika版本是0.9.6,但是我用的是别的版本,发现这样的错误 Traceback (most recent call last):  Fil ...

  7. Rabbitmq的五种模式和案例

    消息生产者p将消息放入队列 消费者监听队列,如果队列中有消息,就消费掉,消息被拿走后,自动从队列删除 (缺点:消息可能没有被消费者正确处理,已经消失了,无法恢复) 应用场景:聊天室 1.引入依赖 &l ...

  8. python - 操作RabbitMQ

    python - 操作RabbitMQ     介绍 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议.MQ全称为Mess ...

  9. {python之协程}一 引子 二 协程介绍 三 Greenlet 四 Gevent介绍 五 Gevent之同步与异步 六 Gevent之应用举例一 七 Gevent之应用举例二

    python之协程 阅读目录 一 引子 二 协程介绍 三 Greenlet 四 Gevent介绍 五 Gevent之同步与异步 六 Gevent之应用举例一 七 Gevent之应用举例二 一 引子 本 ...

随机推荐

  1. Server Error in '/' Application Runtime Error 错误

    项目发布后  在本地发布可以运行  在服务器就会出现这种错误 在网上也查找了各种资料  解决方案 都没有解决 因为我用的C# 首先在 Webconfig配置文件中的 system.web中加入 < ...

  2. Java基础练习3(重载和重写)

    1.(多选题)给定java代码如下所示,在1处新增下列()方法,是对show()方法的重载 public class Test{ public void show(int x, int y, int ...

  3. 简单工厂模式(Simple Factory Pattern)

    简单工厂模式概述 定义:定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类 在简单工厂模式中用于被创建实例的方法通常为静态(static)方法,因此简单工厂模式又被 ...

  4. linux用curl发送post请求

    1.curl -X POST “http://XXXXXXX”这种请求方式参数直接写在URL里面的,而不是body

  5. SQL优化--inner、left join替换in、not in、except

    新系统上线,用户基数16万,各种查询timeout.打开砂锅问到底,直接看sql语句吧,都是泪呀,一大堆in\not in\except.这里总结一下,怎么替换掉in\not in\except. 1 ...

  6. SSIS-导入Excel文件时记录行号

    SSIS导入Excel时记录行号 1. "Excel源"后添加"脚本组件" 2. "脚本组件"中新增输出列,命名为"RowNumb ...

  7. Chrome内核浏览器打开网页报 错误代码: ERR_TIMED_OUT

    升级win10之后如果出现chrome内核的浏览器网页总是打不开 打开很慢  而ie和edge是可以正常访问的 用这个方法可以  我弄了几天终于 搞好了我直接转载过来了近期,工程师收到大量反馈360浏 ...

  8. Hadoop系列008-HDFS的数据流

    本人微信公众号,欢迎扫码关注! HDFS的数据流 1 HDFS写数据流程 1.1 剖析文件写入 1)客户端向namenode请求上传文件,namenode检查目标文件是否已存在,父目录是否存在. 2) ...

  9. springcloud之hystrix熔断器-Finchley.SR2版

    本篇和大家分享的是springcloud-hystrix熔断器,其主要功能是对某模块调用失败做断路和降级,简单点就当某个模块程序出问题了并达到某阈值就限制后面请求,并降级的方式提供一个默认返回数据.最 ...

  10. sklearn中的Pipeline

    在将sklearn中的模型持久化时,使用sklearn.pipeline.Pipeline(steps, memory=None)将各个步骤串联起来可以很方便地保存模型. 例如,首先对数据进行了PCA ...