一、fanout:广播,这种模式只需要将队列绑定到交换机上即可,是不需要设置路由键的
(p代表生产者publisher,x代表交换机exchange,红色的是消息队列queue,下同)
每一个消息队列所收到的内容都是一样的,有多少个队列,就有多少个消息副本。
比如:将所有日志一个记录到磁盘文件,一个在控制台显示。
二、direct:根据RoutingKey匹配消息路由到指定的队列
根据路由键匹配关系,上面的队列只会接收error级别的日志,存储到磁盘中;
而下面的队列会接收info、error、warning级别的日志,放到控制台上。这样就实现了合理分发。
在代码上可以理解为:
生产者发送这三个消息时,指定同一个交换机,三个不同的routingKey
消费者在接收消息时分为两种,第一种为一个exchange绑定一个queue,第二种为一个exchange绑定三个queue
三、topic:生产者指定RoutingKey,消息根据消费端指定的队列通过模糊匹配的方式进行相应转发。消费者只需要绑定需要的消息队列就可以监听想要的消息了。
上述日志系统中,当业务复杂后可能不只是按照日志严重性来指定接收的日志消息,可能有多个维度,比如日志源头。这时候的routingKey就有两个单词了。业务要是继续复杂就有更多个单词。
为了能匹配上不同的routingkey引入两个匹配符号:
* 可以代指一个单词
# 可以代指零个或多个单词
这里以三个维度描述动物举例(通俗的说就是三个单词的路由键),<speed>.<coloer>.<species>
Q1:关心所有三个维度的,中间为orange橙色的所有动物
Q2:关心所有三个维度的rabbit兔子,以及lazy懒惰的所有动物