一、模式介绍

话题模式(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. .net Lambda表达式与Linq (LINQ TO object)

    Lambda表达式,是用来写匿名方法的. 在委托用得比较多,因为委托是传递方法的.   定义几个委托: public delegate void DoNoThing();//无参无返回值   publ ...

  2. SoEasyPlatform 代码生成器

    介绍 一款轻量级开源的代码生成器,相对较动软代码生成器而言要轻量的多,支持多种数据库,所用到dll组件也都在github有源码,代码非常的简单有点基础的看源码可以把生成的项目改成自已的风格. 特色 该 ...

  3. Mybatis-Plus入门示例

    1.内容: Mybatis-Plus只是在Mybatis的基础上,实现了功能增强,让开发更加简洁高效. Mybatis-Plus并没有修改Mybatis的任何特性. 2.入门示例: 2.1 需求:使用 ...

  4. Windows10文件目录下添加 Shift+右键打开管理员Powershell窗口

    背景(可略过) 目前在调试 Python 程序,遇到了一个问题:当程序中包含多线程时,使用 IDLE 运行是不会执行多线程的语句的,在网上一顿搜罗了解到这种情况可以换成在命令行下执行.好像用 PyCh ...

  5. Markdown工具Atom及基本语法

    下载使用 访问atom.io下载Atom 这里下载的是1.33.1版本 好用的插件包 点击File->Settings->Packages,可以安装指定的插件包. markdown-img ...

  6. 从 RegExp 构造器看 JS 字符串转义设计

    多年前我第一次入职腾讯的时候,DC 从杭州给我寄来了一本他刚翻译出炉的<高性能 JavaScript>.那段时间为了帮忙校对,我仔细阅读了书中的每一个段落,结果积累了不少 JavaScri ...

  7. 一些常用Java序列化框架的比较

    概念 序列化:将Java对象转化为字节数组 反序列化:将字节数组转化为Java对象 在RPC应用中,进行跨进程远程调用的时候,需要使用特定的序列化技术,需要对进行网络传输的对象进行序列化和反序列化. ...

  8. [Swift-2019力扣杯春季决赛]2. 按字典序排列最小的等效字符串

    给出长度相同的两个字符串:A 和 B,其中 A[i] 和 B[i] 是一组等价字符.举个例子,如果 A = "abc" 且 B = "cde",那么就有 'a' ...

  9. 【Netty】(3)—源码NioEventLoopGroup

    netty(3)-源码NioEventLoopGroup 一.概念 NioEventLoopGroup对象可以理解为一个线程池,内部维护了一组线程,每个线程负责处理多个Channel上的事件,而一个C ...

  10. springboot~openfeign从JSON文件读取数据

    对openfeign不清楚的同学可以先看我这篇文章:springboot~openfeign从此和httpClient说再见 对于openfeign来说,帮助我们解决了服务端调用服务端的问题,你不需要 ...