一、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到多个单词)
在这个例子中,我们要发送一些描述动物的消息,这些被发送的消息的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一样
三、(貌似不可以插入代码)
网友评论