一、topic是什么?
二、topic exchange和其他exchange之間的區(qū)別?
三、什么時候用topic,怎么用?
一、exchange的類型有五種,一種是fanout,第二種是direct,第三種就是topic,第四種默認的exchange,第五種是headers exchange
二、1、消息發(fā)送到topic exchange的時候 routing_key 不能隨便定義,必須是由"."分開的單詞,類似這樣:"stock.usd.nyse", "nyse.vmw", "quick.orange.rabbit".單詞的數(shù)量可以自己隨意增加,但是不能超過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到多個單詞)

在這個例子中,我們要發(fā)送一些描述動物的消息,這些被發(fā)送的消息的routing_key 由三個單詞(兩個".")組成, "..".
"*.orange.*"綁定Q1 (所有三個單詞的,中間單詞是“orange”的消息都會發(fā)送到Q1)
"*.*.rabbit" 和"lazy.#".綁定Q2(三個單詞的以rabbit結尾的消息和以lazy開頭的多個單詞都會發(fā)送到Q2)
"quick.orange.rabbit" 發(fā)送到Q1和Q2
"lazy.orange.elephant" 發(fā)送到Q1和Q2
"quick.orange.fox" 發(fā)送到Q1
"lazy.brown.fox" 發(fā)送到Q2
"lazy.pink.rabbit" 發(fā)送到Q2(匹配兩個binding_key,但是這兩個bindling_key 都綁定的是Q2)
"quick.brown.fox" 不匹配,這條消息會被丟棄
特殊情況:
一個單詞:"orange",不匹配被丟棄
四個單詞:"quick.orange.male.rabbit",不匹配被丟棄
"lazy.orange.male.rabbit"匹配"lazy.#",發(fā)送到Q2
當一個queue用"#"綁定時,將會收到所有的消息,如果不考慮routing_key基本和 fanout exchange一樣
當queue既不用"*" 也不用"#"綁定時,那topic exchange基本和direct一樣
三、(貌似不可以插入代碼)