(本實(shí)例都是使用的Net的客戶端,使用C#編寫),說明,中文方括號(hào)【】表示名詞。

   在上一個(gè)教程中,我們改進(jìn)了我們的日志記錄系統(tǒng)。 沒有使用只能夠進(jìn)行虛擬廣播的【Fanout】交換機(jī),而是使用了【Direct】類型的交換機(jī),這樣做就可以讓我們有可能選擇性地接收日志。

  雖然使用【Direct】類型的【消息交換機(jī)】改進(jìn)了我們的系統(tǒng),但它仍然有限制 - 它不能基于多個(gè)標(biāo)準(zhǔn)進(jìn)行路由選擇。


  在我們的日志記錄系統(tǒng)中,我們可能不僅要根據(jù)嚴(yán)重性訂閱日志,還可以基于發(fā)出日志的源進(jìn)行訂閱。 您可能會(huì)從syslog unix工具中了解這一概念,該工具根據(jù)嚴(yán)重性(info/warn/crit...)和設(shè)施(auth / cron / kern ...)路由日志。

   這將給我們很大的靈活性 - 我們可能既想監(jiān)聽來自“cron”的重要錯(cuò)誤,也可以監(jiān)聽“kern”的所有日志。

   要在我們的日志記錄系統(tǒng)中實(shí)現(xiàn),我們需要了解一個(gè)更為復(fù)雜的topic類型的【消息交換機(jī)】。

1、Topic類型的【消息交換機(jī)】

   發(fā)送到【Topic】類型【消息交換機(jī)】的消息不能有任意的routing_key - 它必須是由點(diǎn)分隔的單詞列表。 這些詞可以是任何東西,但通常它們指定與消息相關(guān)聯(lián)的一些功能。 幾個(gè)有效的路由關(guān)鍵字示例:“stock.usd.nyse”,“nyse.vmw”,“quick.orange.rabbit”。 路由關(guān)鍵字中可以有任意多的單詞,最多可達(dá)255個(gè)字節(jié)。

   綁定鍵也必須是相同的形式?!綯opic】類型的【消息交換機(jī)】背后的邏輯類似于【Direct】類型的【消息交換機(jī)】 - 使用特定【路由鍵】發(fā)送的消息將被傳遞到與匹配的【綁定鍵】綁定的所有隊(duì)列。 但是,【綁定鍵】有兩個(gè)重要的特殊情況:

     *(星)可以替代一個(gè)字。
     #(井號(hào))可以替換零個(gè)或多個(gè)單詞。

    在一個(gè)例子中最簡(jiǎn)單的解釋一下:
    平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),游戲開發(fā),動(dòng)畫培訓(xùn)

    在這個(gè)例子中,我們將發(fā)送所有描述動(dòng)物的消息。消息將使用由三個(gè)字(兩個(gè)點(diǎn))組成的【路由鍵】發(fā)送。【路由鍵】中的第一個(gè)字將描述速度,第二個(gè)顏色和第三個(gè)種類:“<speed>.<color>.<species>”。

    我們創(chuàng)建了三個(gè)綁定:Q1綁定鍵“*.orange.*”和Q2是“*.*.rabbit”和“l(fā)azy.?!苯壎?。

    這些【綁定鍵】所要表達(dá)意思可以總結(jié)為:

    Q1對(duì)所有的橙色動(dòng)物感興趣。

    Q2想聽聽有關(guān)兔子的一切,以及關(guān)于lazy動(dòng)物的一切。

    將【路由鍵】設(shè)置為“quick.orange.rabbit”的消息將傳遞給兩個(gè)隊(duì)列。消息“l(fā)azy.orange.elephant”也會(huì)發(fā)送他們那兩個(gè)隊(duì)列。另一方面,“quick.orange.fox”只會(huì)發(fā)送到第一個(gè)隊(duì)列,而“l(fā)azy.brown.fox”只能發(fā)送到第二個(gè)隊(duì)列。 “l(fā)azy.pink.rabbit”將被傳遞到第二個(gè)隊(duì)列只有一次,即使它匹配兩個(gè)綁定。 “quick.brown.fox”不匹配任何綁定,所以它將被丟棄。

   如果我們違反約定并發(fā)送一個(gè)或四個(gè)字的消息,如“orange”或“quick.orange.male.rabbit”,會(huì)發(fā)生什么?那么這些消息將不會(huì)匹配任何綁定,并將丟失。

   另一方面,“l(fā)azy.orange.male.rabbit”即使它有四個(gè)字,將匹配上一個(gè)綁定,并將被傳遞到第二個(gè)隊(duì)列。

   說明:【Topic】類型的【消息交換機(jī)】

     此類型的【消息交換機(jī)】是強(qiáng)大的,可以像其他【消息交換機(jī)】一樣行事。

     當(dāng)隊(duì)列用“?!保ü#窘壎ㄦI】綁定時(shí),它將接收所有消息,而不管【路由鍵】,就像使用【Fanout】類型的【消息交換機(jī)】。

     當(dāng)特殊字符“*”(星號(hào))和“?!保ü#┎挥糜诮壎〞r(shí),【Topic】類型的【消息交換機(jī)】將表現(xiàn)得像一個(gè)使用【Direct】類型的【消息交換機(jī)】。

網(wǎng)友評(píng)論