美文网首页
Topics Exchange

Topics Exchange

作者: DOB_8199 | 来源:发表于2021-11-20 17:23 被阅读0次

尽管使用 direct 交换机改进了我们的系统,但是它仍然存在局限性-比方说我们想接收的日志类型有info.base 和 info.advantage,某个队列只想 info.base 的消息,那这个时候 direct 就办不到了。这个时候就只能使用 topic 类型

Topic 的要求


发送到类型是 topic 交换机的消息的 routing_key 不能随意写,必须满足一定的要求,它必须是一个单词列表,以点号分隔开。这些单词可以是任意单词,比如说:"stock.usd.nyse", "nyse.vmw","quick.orange.rabbit".这种类型的。当然这个单词列表最多不能超过 255 个字节。在这个规则列表中,其中有两个替换符是大家需要注意的:

1.    *(星号):可以代替一个单词

2.    #(井号):可以替代零个或多个单词

 Topic 匹配案例


下图绑定关系如下

        Q1-->绑定的是

                中间带 orange 带 3 个单词的字符串(*.orange.*)

        Q2-->绑定的是

                最后一个单词是 rabbit 的 3 个单词(*.*.rabbit)

                第一个单词是 lazy 的多个单词(lazy.#)

上图是一个队列绑定关系图,我们来看看他们之间数据接收情况是怎么样的:

quick.orange.rabbit                 被队列 Q1Q2 接收到

lazy.orange.elephant              被队列 Q1Q2 接收到

quick.orange.fox                    被队列 Q1 接收到

lazy.brown.fox                        被队列Q2 接收到

lazy.pink.rabbit                       虽然满足两个绑定但只被队列 Q2 接收一次

quick.brown.fox                      不匹配任何绑定不会被任何队列接收到会被丢弃

quick.orange.male.rabbit        是四个单词不匹配任何绑定会被丢弃

lazy.orange.male.rabbit          是四个单词但匹配 Q2

当队列绑定关系是下列这种情况时需要引起注意

    当一个队列绑定键是#,那么这个队列将接收所有数据,就有点像 fanout 了

    如果队列绑定键当中没有#和*出现,那么该队列绑定类型就是 direct 了

实战


生产者

消费者01

消费者02

相关文章

网友评论

      本文标题:Topics Exchange

      本文链接:https://www.haomeiwen.com/subject/nhuetrtx.html