一、模式介绍

话题模式(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. DRUID连接池配置详情

    DRUID介绍 DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0.DBCP.PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针 ...

  2. Chrome启动后打开第一个网页很慢的解决方案

    Chrome启动后打开第一个网页很慢的解决方案 Chrome/Chromium以速度快著称,最近每当打开chrome的时候,打开第一个页面都非常慢,往往需要数十秒的时间,经分 析,应该是卡在了域名解析 ...

  3. zookeeper3.4.13集群安装

    环境: Centos7.6 Zookeeper3.4.13 Java1.8 安装前准备 安装java 官网下载jdk-8u201-linux-x64.tar.gz 备用 三台主机:192.168.2. ...

  4. Linux 桌面玩家指南:03. 针对 Gnome 3 的 Linux 桌面进行美化

    特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...

  5. 一分钟上手artTemplate

    一分钟上手artTemplate artTemplate是腾讯开源的前端模版引擎.之前做hue二次开发,只接触过用python写的mako模版引擎,所以之前对前端模版引擎了解不是很多. 这次因为pm叫 ...

  6. 阿里如何实现海量数据实时分析技术-AnalyticDB

    导读:随着数据量的快速增长,越来越多的企业迎来业务数据化时代,数据成为了最重要的生产资料和业务升级依据.本文由阿里AnalyticDB团队出品,近万字长文,首次深度解读阿里在海量数据实时分析领域的多项 ...

  7. 深入理解this关键字

    Java提供了一个this关键字,this关键字总是指向调用该方法的对象.根据this出现的位置的不同,this作为对象的默认引用有两种情形. 1)构造器中引用该构造器正在初始化的对象. 2)在方法中 ...

  8. 【Netty】(9)---Netty编解码器

    Netty编解码器 在了解Netty编解码之前,先了解Java的编解码: 编码(Encode)称为序列化, 它将对象序列化为字节数组,用于网络传输.数据持久化或者其它用途. 解码(Decode)称为反 ...

  9. ASP.NET Core WebApi中使用FluentValidation验证数据模型

    原文链接:Common features in ASP.NET Core 2.1 WebApi: Validation 作者:Anthony Giretti 译者:Lamond Lu 介绍 验证用户输 ...

  10. python3打开winodows文件问题

    1,解决办法 "C:\\Users\\Darkness-02\\Desktop\\test.txt" 多加一个反斜杠就行了 2,解决办法r"C:\Users\Darkne ...