RabbitMQ(5): 主题分发

1. 主题(Topics):

fanout模式只能进行简单的广播,direct模式虽然在过滤上进行了一定的提升,但是不能支持复杂的条件,

比如我们的日志消息,现在不仅要知道消息级别,也要知道消息来源。在这样的复杂需求下,我们需要使用

主题交换。

 

2. 主题交换:

发送主题交换的的routing_key不是任意的,必须遵循如下格式:使用.分隔的一些字。通常这些字用来表示

消息的某些特性,如:”stock.usd.nyse”, “nyse.vmw”, “quick.orange.rabbit”。

注意routing_key的最大长度是255。

绑定routing_key也必须是同样的格式,交换后端形式与直接路由相似,交换匹配消息中的routing_key和绑定队列

所需要接受消息的routing_key,并且将满足条件的消息进行派发。

通配符:

* — 代表一个字(word)

# — 代表零个或者多个字

 

如下图模型,我们使用”<celerity>.<colour>.<species>”来形容动物,可见Q1关心所有橘黄的动物,

Q2关心所有兔子或者懒惰的动物。

quick.orange.rabbit” — 分发到Q1和Q2

“lazy.orange.elephant” — 分发到Q1和Q2

“quick.orange.fox” — 分发到Q1

“lazy.brown.fox” — 分发到Q2

“lazy.pink.rabbit” — 只分发一次到Q2,尽管匹配两个条件

“quick.brown.fox” — 无匹配,丢弃

“quick.orange.male.rabbit” — 无匹配,丢弃

“lazy.orange.male.rabbit” — 匹配规则3,分发到Q2

 

3. 测试代码:

emit_log_topic.py

receive_logs_topic.py

 

本文链接:RabbitMQ(5): 主题分发

转载声明:转载请注明来源:Linux TCP/IP Stack,谢谢!


发表评论

电子邮件地址不会被公开。 必填项已用*标注