RabbitMQ之"Topics"

一、topic是什么?

二、topic exchange和其他exchange之间的区别?

三、什么时候用topic,怎么用?

英文版原文

一、exchange的类型有五种,一种是fanout,第二种是direct,第三种就是topic,第四种默认的exchange,第五种是headers exchange

二、1、消息发送到topic exchange的时候 routing_key 不能随便定义,必须是由"."分开的单词,类似这样:"stock.usd.nyse", "nyse.vmw", "quick.orange.rabbit".单词的数量可以自己随意增加,但是不能超过225bytes, binding key必须也是相同的形式

2、topic背后的逻辑和direct类似:一条有着特别routing_key 的消息会被送到匹配 binding key的所有queue

binding key:

* (star) can substitute for exactly one word(*只能替换匹配一个单词)

# (hash) can substitute for zero or more words.(#能替换匹配0到多个单词)

RabbitMQ之

在这个例子中,我们要发送一些描述动物的消息,这些被发送的消息的routing_key 由三个单词(两个".")组成, "..".

"*.orange.*"绑定Q1 (所有三个单词的,中间单词是“orange”的消息都会发送到Q1)

"*.*.rabbit" 和"lazy.#".绑定Q2(三个单词的以rabbit结尾的消息和以lazy开头的多个单词都会发送到Q2)

"quick.orange.rabbit" 发送到Q1和Q2

"lazy.orange.elephant" 发送到Q1和Q2

"quick.orange.fox" 发送到Q1

"lazy.brown.fox" 发送到Q2

"lazy.pink.rabbit" 发送到Q2(匹配两个binding_key,但是这两个bindling_key 都绑定的是Q2)

"quick.brown.fox" 不匹配,这条消息会被丢弃

特殊情况:

一个单词:"orange",不匹配被丢弃

四个单词:"quick.orange.male.rabbit",不匹配被丢弃

"lazy.orange.male.rabbit"匹配"lazy.#",发送到Q2

当一个queue用"#"绑定时,将会收到所有的消息,如果不考虑routing_key基本和 fanout exchange一样

当queue既不用"*" 也不用"#"绑定时,那topic exchange基本和direct一样

三、(貌似不可以插入代码)

你可能感兴趣的:(RabbitMQ之"Topics")