RabbitMQ系列(六):Topics

? ? ? ? 之前幾節(jié)已經(jīng)學(xué)習(xí)過(guò)fanout exchange,direct exchange的使用,并用他們構(gòu)建了一個(gè)日志系統(tǒng),盡管direct exchange使得我們的日志系統(tǒng)更實(shí)用化,但是仍然有局限性,因?yàn)槲覀冎皇歉鶕?jù)了日志的嚴(yán)重等級(jí)(info,warning,error)進(jìn)行了分發(fā)肾砂,但是沒(méi)關(guān)心日志的來(lái)源(auth / cron / kern ...)啃勉。但是Topic exchange更加靈活罕拂,能滿足我們的需求仰剿,如:我們想監(jiān)聽(tīng)來(lái)自cron的重要錯(cuò)誤卧须,同時(shí)也可以監(jiān)聽(tīng)來(lái)自kern的所有日志另绩。

Topic exchange

發(fā)送到topic exchange的消息不會(huì)擁有一個(gè)特定的routing key——它可能有一系列由點(diǎn)分隔的詞組成儒陨。這些詞可以是任意值,但是通常將它設(shè)置為與message有一定的聯(lián)系的單詞笋籽。就像"stock.usd.nyse", "nyse.vmw", "quick.orange.rabbit"之類的蹦漠,你喜歡多少個(gè)詞組合就設(shè)計(jì)多少個(gè),routing key最多可達(dá)255 bytes车海。

binding key也必須用如上的routing key的形式笛园。topic exchange背后的邏輯和direct exchange的邏輯很相似——一個(gè)包含routing key的message將會(huì)被分發(fā)到所有匹配的binding key后的queue中。但是侍芝,這里有兩點(diǎn)需要注意的地方:

*(star)可以替換為任一一個(gè)詞研铆。

#(hash)可以替換0個(gè)或多個(gè)詞。

如下例子中簡(jiǎn)單解釋一下:

在上圖例子中州叠,我們可以發(fā)送描述animals的消息到x exchange中棵红,message將使用有3個(gè)單詞(兩個(gè)點(diǎn)分隔)組成的routing key進(jìn)行發(fā)送,第一個(gè)單詞描述的是speed咧栗,第二個(gè)描述colour逆甜,第三個(gè)描述species:"<speed>.<colour>.<species>"。

同時(shí)創(chuàng)建3條bindings:Q1的binding key為"*.orange.*"楼熄,Q2的binding key為"*.*.rabbit"和"lazy.#"

這些bindings總結(jié)如下:

Q1對(duì)animals顏色為orange的感興趣忆绰。

Q2會(huì)接收所有關(guān)于rabbits和lazy的animals。

message的routing key設(shè)置為"quick.orange.rabbit"則會(huì)被分發(fā)到這兩個(gè)queue中可岂;設(shè)置為"lazy.orange.elephant"也會(huì)被分發(fā)到兩個(gè)queue中错敢;設(shè)置為"quick.orange.fox"則只會(huì)分發(fā)到Q1中;設(shè)置為"lazy.brown.fox"則只會(huì)分發(fā)到Q2中缕粹;設(shè)置為"lazy.pink.rabbit"也只會(huì)分發(fā)一次到Q2中稚茅,盡管這個(gè)routing key匹配兩個(gè)bindings;設(shè)置為"quick.brown.fox"的消息由于不匹配任何的binding key平斩,因此該message會(huì)被丟棄亚享。

同樣,如果我們發(fā)送只有一個(gè)詞或者四個(gè)詞的routing key绘面,像"orange" 或"quick.orange.male.rabbit"這樣的會(huì)是什么結(jié)果欺税?結(jié)果是,同樣不匹配揭璃,message會(huì)被丟棄晚凿。像"lazy.orange.male.rabbit"這樣的,盡管有四個(gè)詞組成瘦馍,但是它匹配"lazy.#"歼秽,所以會(huì)被分發(fā)到Q2中。

注:topic exchange非常強(qiáng)大并且可以實(shí)現(xiàn)其他exchange的功能情组。

(1)當(dāng)一個(gè)queue的binding key是"#"(hash)時(shí)燥筷,這個(gè)queue將會(huì)接收所有的message箩祥,就像fanout exchange一樣。

(2)當(dāng)特殊字符*(start)和#(hash)在binding key中都不使用時(shí)肆氓,topic exchange 的功能就和direct exchange的功能一樣袍祖。

實(shí)現(xiàn)

topic exchange的用法和direct exchange的用法大同小異。

同樣做院,先看看sender.go

函數(shù)severityFrom()進(jìn)行了調(diào)整盲泛,即發(fā)送message時(shí)必須設(shè)置routing key的值。

在看看receiver.go

聲明exchange和queue

根據(jù)命令行參數(shù)設(shè)置binding key

從queue中接收消息

現(xiàn)在運(yùn)行兩個(gè)consumer

在producer端發(fā)送消息

有點(diǎn)亂键耕,整理下發(fā)送的消息:

(1)producer.exe bad.orange.black 初級(jí)賽亞人

(2)producer.exe lazy.orange.* 黑色賽亞人

(3)producer.exe lazy.xxx.xxx 懶人賽亞人

看看兩個(gè)consumer分別收到了哪些消息

再看看RabbitMQ Server的web監(jiān)控頁(yè)面:

這樣就可以實(shí)現(xiàn)日志不僅按嚴(yán)重等級(jí)進(jìn)行劃分寺滚,還可以按日志來(lái)源,用戶等等進(jìn)行劃分屈雄。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末村视,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子酒奶,更是在濱河造成了極大的恐慌蚁孔,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惋嚎,死亡現(xiàn)場(chǎng)離奇詭異杠氢,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)另伍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)鼻百,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人摆尝,你說(shuō)我怎么就攤上這事温艇。” “怎么了堕汞?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵勺爱,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我讯检,道長(zhǎng)琐鲁,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任人灼,我火速辦了婚禮绣否,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘挡毅。我一直安慰自己,他們只是感情好暴构,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布跪呈。 她就那樣靜靜地躺著段磨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪耗绿。 梳的紋絲不亂的頭發(fā)上苹支,一...
    開(kāi)封第一講書(shū)人閱讀 51,190評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音误阻,去河邊找鬼债蜜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛究反,可吹牛的內(nèi)容都是我干的寻定。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼精耐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼狼速!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起卦停,我...
    開(kāi)封第一講書(shū)人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤向胡,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后惊完,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體僵芹,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年小槐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拇派。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡本股,死狀恐怖攀痊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拄显,我是刑警寧澤苟径,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站躬审,受9級(jí)特大地震影響棘街,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜承边,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一遭殉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧博助,春花似錦险污、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拯腮。三九已至,卻和暖如春蚁飒,著一層夾襖步出監(jiān)牢的瞬間动壤,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工淮逻, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留琼懊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓爬早,卻偏偏與公主長(zhǎng)得像哼丈,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子凸椿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容