先附加下官網(wǎng)文檔。RabbitMQ的交換機(jī)類型共有四種,是根據(jù)其路由過程的不同而劃分成的:
一、Direct Exchange(直連交換機(jī))
直連型交換機(jī)背后的路由算法很簡單——消息會傳送給綁定鍵與消息的路由鍵完全匹配的那個隊列。 我們用直連交換機(jī)取代了只會無腦廣播的扇形交換機(jī),并且具備了選擇性接收消息的能力。
這種配置下,我們可以看到有兩個隊列Q1、Q2綁定到了直連交換機(jī)X上。第一個隊列用的是橘色(orange)綁定鍵,第二個有兩個綁定鍵,其中一個綁定鍵是黑色(black),另一個綁定鍵是綠色(green)。在此設(shè)置中,發(fā)布到交換機(jī)的帶有橘色(orange)路由鍵的消息會被路由給隊列Q1。帶有黑色(black)或綠色(green)路由鍵的消息會被路由給Q2。其他的消息則會被丟棄。
二、 Fanout Exchange(扇型交換機(jī))
Fanout Exchange(扇型交換機(jī)):當(dāng)一個Msg發(fā)送到扇形交換機(jī)X上時,則扇形交換機(jī)X會將消息分別發(fā)送給所有綁定到X上的消息隊列。扇形交換機(jī)將消息路由給綁定到自身的所有消息隊列,也就是說路由鍵在扇形交換機(jī)里沒有作用,故消息隊列綁定扇形交換機(jī)時,路由鍵可為空。這個模式類似于廣播。
三、Topic Exchange(主題交換機(jī))
(1)路由鍵和綁定鍵命名
- 消息路由鍵—發(fā)送到主題交換機(jī)的消息所攜帶的路由鍵(routing_key)不能隨意命名——它必須是一個用點號分隔的詞列表。當(dāng)中的詞可以是任何單詞,不過一般都會指定一些跟消息有關(guān)的特征作為這些單詞。列舉幾個有效的路由鍵的例子:“stock.usd.nyse”, “nyse.vmw”, “quick.orange.rabbit”。只要不超過255個字節(jié),詞的長度由你來定。
- 綁定鍵(binding key)也得使用相同的格式。主題交換機(jī)背后的邏輯跟直連交換機(jī)比較相似——一條攜帶特定路由鍵(routing key)的消息會被投送給所有綁定鍵(binding key)與之相匹配的隊列。盡管如此,仍然有兩條與綁定鍵相關(guān)的特殊情況:
*
(星號) 能夠替代一個單詞。
#
(井號) 能夠替代零個或多個單詞。
(2)示例解析,如上圖:
我們將會發(fā)送用來描述動物的多條消息。發(fā)送的消息包含帶有三個單詞(兩個點號)的路由鍵(routing key)。路由鍵中第一個單詞描述速度,第二個單詞是顏色,第三個是品種: “<速度>.<顏色>.<品種>”。我們創(chuàng)建三個綁定:Q1通過".orange.“綁定鍵進(jìn)行綁定,Q2使用”..rabbit" 和 “l(fā)azy.#”。
隊列綁定鍵解釋:
- Q1針對所有的橘色orange動物。
- Q2針對每一個有關(guān)兔子rabbits和慵懶l(wèi)azy的動物的消息。
消息路由鍵解釋:
- 一個帶有"quick.orange.rabbit"路由鍵的消息會給兩個隊列都進(jìn)行投送。消息"lazy.orange.elephant"也會投送給這兩個隊列。
- 另外一方面,“quick.orange.fox” 只會給第一個隊列。"lazy.pink.rabbit"雖然與兩個綁定鍵都匹配,但只會給第二個隊列投送一遍?!皅uick.brown.fox” 沒有匹配到任何綁定,因此會被丟棄掉。
(3)異常情況
如果我們破壞規(guī)則,發(fā)送的消息只帶有一個或者四個單詞,例如 “orange” 或者 "quick.orange.male.rabbit"會發(fā)生什么呢?結(jié)果是這些消息不會匹配到任何綁定,將會被丟棄。另一方面,“l(fā)azy.orange.male.rabbit”即使有四個單詞,也會與最后一個綁定匹配,并 被投送到第二個隊列。
(4)注意事項
主題交換機(jī)非常強(qiáng)大,并且可以表現(xiàn)的跟其他交換機(jī)相似。
- 當(dāng)一個隊列使用"#"(井號)綁定鍵進(jìn)行綁定。它會表現(xiàn)的像扇形交換機(jī)一樣,不理會路由鍵,接收所有消息。
- 當(dāng)綁定當(dāng)中不包含任何一個 “*” (星號) 和 “#” (井號)特殊字符的時候,主題交換機(jī)會表現(xiàn)的跟直連交換機(jī)一毛一樣。
四、Headers Exchange(頭交換機(jī))
頭交換機(jī)類似與主題交換機(jī),但是卻和主題交換機(jī)有著很大的不同。主題交換機(jī)使用路由鍵來進(jìn)行消息的路由,而頭交換機(jī)使用消息屬性來進(jìn)行消息的分發(fā),通過判斷消息頭的值能否與指定的綁定相匹配來確立路由規(guī)則。
在頭交換機(jī)里有一個特別的參數(shù)”x-match”,當(dāng)”x-match”的值為“any”時,只需要消息頭的任意一個值匹配成功即可,當(dāng)”x-match”值為“all”時,要求消息頭的所有值都需相等才可匹配成功。文章來源:http://www.zghlxwxcb.cn/news/detail-456785.html
相關(guān)文章
RabbitMQ的六種工作模式
RabbitMQ如何保證消息的可靠性文章來源地址http://www.zghlxwxcb.cn/news/detail-456785.html
到了這里,關(guān)于RabbitMQ交換機(jī)類型的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!