python3 RabbitMQ ( Topics!)

本文主要介绍了Python3中RabbitMQ的主题交换(Topic Exchange),它允许基于多个标准路由消息,增强了日志系统的灵活性。文章详细阐述了主题交换的工作原理,包括路由键的格式、特殊字符如星号(*)和哈希(#)的使用,以及如何创建和绑定队列。通过实例展示了如何使用主题交换处理日志,确保消息被正确地路由到感兴趣的队列。
摘要由CSDN通过智能技术生成

准备知识

What This Tutorial Focuses On

在前面的教程中,我们改进了日志系统。我们没有使用只能进行虚拟广播的扇出交换,而是使用了直接交换,并获得了选择性地接收日志的可能性。
虽然使用direct exchange改进了我们的系统,但是它仍然有局限性——它不能基于多个标准进行路由。

在我们的日志系统中,我们可能不仅要根据严重性订阅日志,还要根据发出日志的源订阅日志。您可能从syslog unix工具中了解了这个概念,该工具根据严重性(info/warn/crit…)和功能(auth/cron/kern…)来路由日志。

这将给我们带来很大的灵活性——我们可能只希望听到来自“cron”的关键错误,但也希望听到来自“kern”的所有日志。

要在日志系统中实现这一点,我们需要了解更复杂的主题交换。

Topic exchange

发送到主题交换的消息不能有任意的routing_key——它必须是由点分隔的单词列表。单词可以是任何东西,但通常它们指定了与消息相关的一些特性。一些有效的路由关键示例:“stock.usd。”纽交所”、“纽交所。vmw”、“quick.orange.rabbit”。路由键中可以有任意多的单词,最多255字节。

绑定键的形式也必须相同。主题交换背后的逻辑类似于直接交换——使用特定路由键发送的消息将被传递到使用匹配绑定键绑定的所有队列。但是,绑定键有两个重要的特殊情况:

  • *(星号)只能代替一个单词。
  • #(哈希)可以替代0个或多个单词。

这是最容易解释的一个例子:
在这里插入图片描述

在这个例子中,我们将发送所有描述动物的信息。消息将通过一个由三个单词(两个点)组成的路由键发送。路由键中的第一个单词将描述一个快速,第二个单词描述颜色,第三个单词描述一个物种:“..”。

We created three bindings: Q1 is bound with binding key “.orange.” and Q2 with “..rabbit” and “lazy.#”.

这些绑定可以总结为:

  • Q1对所有橙色的动物都感兴趣。
  • Q2想听关于兔子的一切,关于懒惰的动物的一切。

A message with a routing key set to “quick.orange.rabbit” will be delivered to both queues. Message “lazy.orange.elephant” also will go to both of them. On the other hand “quick.orange.fox” will only go to the first queue, and “lazy.brown.fox” only to the second. “lazy.pink.rabbit” will be delivered to the second queue only once, even though it matches two bindings. “quick.brown.fox” doesn’t match any binding so it will be discarded.

What happens if we break our contract and send a message with one or four words, like “orange” or “quick.orange.male.rabbit”? Well, these messages won’t match any bindings and will be lost.

On the other hand “lazy.orange.male.rabbit”, even though it has four words, will match the last binding and will be

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值