| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> python之RabbitMQ教程四 -> 正文阅读 |
|
[Python知识库]python之RabbitMQ教程四 |
路由-Routing在之前的教程中,我们构建了一个简单的日志系统。我们能够向许多接收器广播日志消息。 在本教程中,我们将向其添加一个功能——我们将只订阅消息的一个子集。例如,我们能够仅将关键错误消息定向到日志文件(以节省磁盘空间),同时仍然能够在控制台上打印所有日志消息。 绑定在前面的例子中,我们已经在创建绑定。你可能会想起这样的代码:
绑定是交换器和队列之间的关系。这可以简单地理解为:队列对来自这个交换的消息感兴趣。 绑定可以采用额外的routing_key参数。为了避免与basic_publish参数混淆,我们将称其为binding key。这时我们如何创建绑定:
binding key的含义取决于交换类型。我们之前使用的fanout交换只是忽略了它的值。 直接交换(Direct exchange)我们上一教程中的日志系统将所有消息广播给所有消费者。我们希望扩展它以允许根据其严重性过滤消息。例如,我们可能希望将日志消息写入磁盘的脚本只接收严重错误,而不是在警告或信息日志消息上浪费磁盘空间。 我们使用的的fanout交换,它没有给我们太多的灵活性——它只能进行无意识的广播。 我们将改用direct交换,direct交换背后的路由算法很简单——消息进入其binding key与消息的routing key完全匹配的队列?。 为了说明这一点,请考虑以下设置: 在此设置中,我们可以看到绑定了两个队列的direct交换X。第一个队列绑定了绑定键orange,第二个队列有两个绑定,一个绑定键为black,另一个绑定为green。 在这样的设置中,使用路由密钥orange发布到交换机的消息将被路由到队列Q1。路由键为black或green的消息将转到Q2。所有其他消息将被丢弃。 多重绑定使用相同的绑定键绑定多个队列是完全合法的。在我们的示例中,我们可以使用绑定键black在X和Q1之间添加一个绑定。在这种情况下,直接交换的行为类似于扇出,并将消息广播到所有匹配的队列。路由键为black的消息将同时发送到Q1和Q2。 发出日志我们将在我们的日志系统中使用这个模型。我们将向direct交换发送消息而不是fanout。我们将提供日志严重性作为路由键。这样接收脚本将能够选择它想要接收的严重性。让我们首先专注于发出日志。 像往常一样,我们需要先创建一个交换:
?我们准备发送消息:
为了简化事情,我们假设“severity”可以是“info”、“warning”、“error”之一. 订阅接收消息的工作方式与上一教程一样,但有一个例外——我们将为我们感兴趣的每个严重性创建一个新绑定。
把这一切放在一起emit_log_direct.py文件的整体代码为:
?receive_logs_direct.py文件整体代码为:
如果您只想将“warning”和“error”(而不是“info”)日志消息保存到文件中,只需打开控制台并键入:
如果您想在屏幕上查看所有日志消息,请打开一个新终端并执行以下操作:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 2:49:05- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |