一、模式介绍

路由模式,与发布-订阅模式一样,消息发送到exchange中,消费者把队列绑定到exchange上。

这种模式在exchange上添加添加了一个路由键(routing-key),生产者发布消息的时候添加路由键(routing-key),消费者绑定队列到交换机时添加键值(routing-key),这样就可以接收到对应的消息。

路由模式的direct exchange。

队列模型:

与发布-订阅模式不同的是,每个消费者队列接收的消息不同,根据消息的routing-key把消息发送到不同的队列中。

当所有的消费队列绑定的routing-key一样时,路由模式行为与发布-订阅模式一样。

二、代码示意

发布者:不再创建队列,发送消息到exchange(交换机)中。exchange_type为direct。

 import pika
import sys connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel() channel.exchange_declare(exchange='direct_logs',
exchange_type='direct') severity = ['info', 'warning', 'error']
for i in range(20):
message = '{} Hello World! {}'.format(i, severity[i % 3])
channel.basic_publish(exchange='direct_logs',
routing_key=severity[i % 3],
body=message)
print(" [x] Sent: {}".format(message))
connection.close()

每个消费者绑定的队列定义不同的routing-key,接收到不同的消息。

以info为示例:

 import pika
import sys connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel() channel.exchange_declare(exchange='direct_logs',
exchange_type='direct') result = channel.queue_declare(exclusive=True)
queue_name = result.method.queue channel.queue_bind(exchange='direct_logs',
queue=queue_name,
routing_key='info') 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 Hello World! info
[x] Sent: 1 Hello World! warning
[x] Sent: 2 Hello World! error
[x] Sent: 3 Hello World! info
[x] Sent: 4 Hello World! warning
[x] Sent: 5 Hello World! error
[x] Sent: 6 Hello World! info
[x] Sent: 7 Hello World! warning
[x] Sent: 8 Hello World! error
[x] Sent: 9 Hello World! info
[x] Sent: 10 Hello World! warning
[x] Sent: 11 Hello World! error
[x] Sent: 12 Hello World! info
[x] Sent: 13 Hello World! warning
[x] Sent: 14 Hello World! error
[x] Sent: 15 Hello World! info
[x] Sent: 16 Hello World! warning
[x] Sent: 17 Hello World! error
[x] Sent: 18 Hello World! info
[x] Sent: 19 Hello World! warning

Info输出:

[*] Waiting for logs. To exit press CTRL+C
[x] 'info':b'0 Hello World! info'
[x] 'info':b'3 Hello World! info'
[x] 'info':b'6 Hello World! info'
[x] 'info':b'9 Hello World! info'
[x] 'info':b'12 Hello World! info'
[x] 'info':b'15 Hello World! info'
[x] 'info':b'18 Hello World! info'

Warning输出:

[*] Waiting for logs. To exit press CTRL+C
[x] 'warning':b'1 Hello World! warning'
[x] 'warning':b'4 Hello World! warning'
[x] 'warning':b'7 Hello World! warning'
[x] 'warning':b'10 Hello World! warning'
[x] 'warning':b'13 Hello World! warning'
[x] 'warning':b'16 Hello World! warning'
[x] 'warning':b'19 Hello World! warning'

Error输出:

[*] Waiting for logs. To exit press CTRL+C
[x] 'error':b'2 Hello World! error'
[x] 'error':b'5 Hello World! error'
[x] 'error':b'8 Hello World! error'
[x] 'error':b'11 Hello World! error'
[x] 'error':b'14 Hello World! error'
[x] 'error':b'17 Hello World! error'

可以看到,不同的消费者收到不同级别的日志信息。

三、队列信息

管理页面,exchange页面,点击“direct_logs”上查看队列情况,可以看到三个不同routing_key的队列

routing key列展示了对应的key。

python使用rabbitMQ介绍四(路由模式)的更多相关文章

  1. python使用rabbitMQ介绍五(话题模式)

    一.模式介绍 话题模式(Topic)基本思想和路由模式是一样的,只不过路由键支持模糊匹配,符号“#”匹配一个或多个词,符号“*”匹配不多不少一个词 话题模式相当于消息的模糊匹配,或者按照正则匹配.其中 ...

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

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

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

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

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

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

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

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

  6. RabbitMQ学习第四记:路由模式(direct)

    1.什么是路由模式(direct) 路由模式是在使用交换机的同时,生产者指定路由发送数据,消费者绑定路由接受数据.与发布/订阅模式不同的是,发布/订阅模式只要是绑定了交换机的队列都会收到生产者向交换机 ...

  7. python - 操作RabbitMQ

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

  8. ASP.NET Core路由中间件[2]: 路由模式

    一个Web应用本质上体现为一组终结点的集合.终结点则体现为一个暴露在网络中可供外界采用HTTP协议调用的服务,路由的作用就是建立一个请求URL模式与对应终结点之间的映射关系.借助这个映射关系,客户端可 ...

  9. RabbitMq四种模式介绍和授权

    rabbitmqctl change_password admin admin123 修改admin密码 界面管理和授权操作 1新增用户 rabbitmqctl add_user admin amin ...

随机推荐

  1. Python之路【第二篇】:Python基础

    Python基础 对于Python,一切事物都是对象,对象基于类创建 所以,以下这些值都时对象:"zhurui".22.['北京','上海','深圳'],并且是根据不同的类生成的对 ...

  2. SqlServer中循环给多张表建立聚簇索引

    缘由 因为在某个复(bian)杂(tai)需求中用到了170+张表进行查询,而且表中的数据过多,查起来缓慢.只能给这些表添加索引.但是,连表名也是无法确定的(无力吐槽). 解决方法 使用游标遍历查询出 ...

  3. PowerShell禁止执行脚本解决方法

    无法加载文件 C:\***.p s1,因为在此系统中禁止执行脚本.有关详细信息,请参阅 "get-help about_signing". 所在位置 行:1 字符: 18 + .\ ...

  4. c# word文档的操作

    参考https://blog.csdn.net/ruby97/article/details/7406806 Word对象模型  (.Net Perspective) 本文主要针对在Visual St ...

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

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

  6. IoC和AOP的理解

    spring 的优点?1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实 ...

  7. Kafka的partions和replication-factor参数的理解

    Topic在Kafka中是主题的意思,生产者将消息发送到主题,消费者再订阅相关的主题,并从主题上拉取消息. 在创建Topic的时候,有两个参数是需要填写的,那就是partions和replicatio ...

  8. C#在window服务配置Log4Net.dll

    1.使用背景: C#window服务下添加一个日志记录程序集(Log4Net.dll) 2.添加和使用步骤如下: 一.下载并引入Log4Net.dll程序集到项目中 下载地址:http://loggi ...

  9. Python开发:部分第三方库无法在线安装解决方法

    前言:Python开发:Python2和Python3的共存和切换使用 一.问题如下: 1.截图: 2.错误信息: Could not find a version that satisfies th ...

  10. Docker 导出&加载镜像

    文章首发自个人网站:https://www.exception.site/docker/docker-save-load-image 本文中,您将学习 Docker 如何导出&加载镜像.当我们 ...