在上篇中,我们对之前的日志系统做了稍许的完善。没有使用fanout类型的exchange来广播,而是使用了direct类型的exchange来选择性的接收日志消息。
尽管使用了direct类型的exchange对日志系统有所提升,但还是有一些限制(消息不能够基于多重因素来路由)。
在我们的日志系统中,希望不仅仅能够根据日志级别来订阅,还可以根据指定的routing key来订阅。你应该可以理解的,就如unix的系统日志工具,日志消息路由规则不仅仅基于日志级别(info/warn/crit…),还可以基于设备(auth/cron/kern…)。
这样大大的提高的灵活性,例如我们可以只监听kern推送出来的error级别的日志。
为了在我们的日志记录系统中实现这样的功能,我们需要了解更多关于topic类型的exchange。
1、Topic类型的exchange
消息发送到topic类型的exchange上时不能随意指定routing_key(一定是指由一系列由点号连接单词的字符串,单词可以是任意的,但一般都会与消息或多或少的有些关联)。Routing key的长度不能超过255个字节。
Binding key也一定要是同样的方式。Topic类型的exchange就像一个直接的交换:一个由生产者指定了确定routing key的消息将会被推送给所有Binding key能与之匹配的消费者。然而这种绑定有两种特殊的情况:
- *(星号):可以(只能)匹配一个单词
- #(井号):可以匹配多个单词(或者零个) </