Spring AMQP雜記之AMQP基本概念

特別聲明:強(qiáng)烈建議想要學(xué)習(xí)MQ的同學(xué)如果有時間慢慢啃的話還是推薦直接去官網(wǎng)看英文doc沉删,遇到實在不理解的地方再去博客或者其他網(wǎng)站上找資料织中。

接下來步入正題:AMQP本質(zhì)是一個消息隊列協(xié)議而并非一個框架,我們熟知的RabbitMQ艳悔,RocketMQ才是實現(xiàn)了AMQP的消息隊列框架弄兜。Spring默認(rèn)的AMQP實現(xiàn)也是唯一的實現(xiàn)是RabbitMQ少欺。至于阿里的火箭MQ白翻,apache的activeMQ就沒有提供實現(xiàn)啦乍炉。至于以上這些MQ框架孰優(yōu)孰劣,要根據(jù)實際情況自己判斷了滤馍。本人更偏向于使用RabbitMQ岛琼,一個因為是Spring對其進(jìn)行了封裝,使用起來比較簡單巢株。槐瑞。。(最主要的原因)阁苞,二是因為本身他是Erlang語言編寫困檩,對于并發(fā)的支持較好祠挫,而且網(wǎng)上的各家MQ的性能測試對比中表現(xiàn)的也比較好。

首先介紹AMQP中幾個重要的概念:下面這張圖片是RabbitMQ官網(wǎng)中對于AMQP模型的抽象

AMQP模型

如圖悼沿,整個消息流轉(zhuǎn)的過程是:生產(chǎn)者將消息發(fā)送到Exchange中茸歧,Exchange再將消息根據(jù)一定的規(guī)則路由到指定的隊列中,最后消費者從指定的隊列中獲取消息显沈。其中被方框圈起來的組件可以稱為Broker,即MQ服務(wù)器逢唤,Publisher和Consumer就是我們自己實現(xiàn)的生產(chǎn)者和消費者拉讯。接下來詳細(xì)介紹一下上面的幾個組件。

Exchange

Exchange(交換機(jī))類型:他是生產(chǎn)者發(fā)送消息的地方鳖藕,交換機(jī)收到消息后將消息路由到0或多個隊列中魔慷,AMQP一共定義了4種交換機(jī),如圖:

RabbiMQ官網(wǎng)圖

其實還有一個Default Exchange著恩,只不過它是被MQ服務(wù)器提前聲明的一種沒有名字的Direct exchange院尔。但是它有一個很重要的屬性,創(chuàng)建的每一個隊列都會自動的用隊列名作為路由鍵(路由key路由的規(guī)則)綁定到該exchange中喉誊。打個比方邀摆,比如你創(chuàng)建了一個名稱為“talk-is-cheap——show-me-the-code”的隊列,MQ會自動的用“talk-is-cheap——show-me-the-code”作為路由key綁定到Default exchange伍茄,所以當(dāng)生產(chǎn)者發(fā)送的消息攜帶名為“talk-is-cheap——show-me-the-code”的路由key時就會發(fā)送到聲明的隊列中去了栋盹。


Direct exchange:

官網(wǎng)盜圖

他是根據(jù)路由key將消息發(fā)送到指定隊列,比較適合一對一的場景敷矫。工作流程如下:聲明隊列時指定一個路由key綁定到exchange例获,當(dāng)有攜帶相同key的消息到達(dá)exchange中時就會自動的轉(zhuǎn)發(fā)給該隊列了。


Fanout? exchange:

官網(wǎng)盜圖

如圖曹仗,該交換機(jī)是將消息轉(zhuǎn)發(fā)到所有綁定到該交換機(jī)上的隊列榨汤,這個時候如果你發(fā)給交換機(jī)的消息攜帶路由key,他也會忽略掉怎茫。這個場景最適合的就是廣播了收壕,類似村書記喇叭一喊,大家都能聽到了轨蛤。這里貼幾個官網(wǎng)對于該交換機(jī)幾個使用場景的介紹啼器。

大型多玩家在線(MMO)游戲可以使用它來更新排行榜或其他全球事件

體育新聞網(wǎng)站可以使用fanout交換器向移動客戶實時分發(fā)分?jǐn)?shù)更新

分布式系統(tǒng)可以廣播各種狀態(tài)和配置更新(記得Spring Cloud Bus的配置廣播嗎?)

Topic Exchange:

官網(wǎng)盜圖

他通過一定的路由策略將符合條件的路由key轉(zhuǎn)發(fā)到多個符合路由策略的隊列上俱萍,和直連交換機(jī)類似端壳,只不過他匹配的是key的模式,類似于正則匹配枪蘑。其中*代表任意的一個詞损谦,#代表0或多個詞岖免。使用場景比如這個任務(wù)隊列里的消息需要多個消費者處理,而每個消費者只能處理特定的任務(wù)照捡。


Headers Exchange:

類似于http的head颅湘,可以設(shè)置多個屬性,根據(jù)屬性進(jìn)行隊列匹配栗精。首部交換機(jī)也會忽略路由鍵闯参。當(dāng)有多個首部的時候怎么知道該匹配哪一個呢?交換機(jī)有一個“x-match”參數(shù)悲立,設(shè)置為any表示任意一個匹配即可鹿寨,設(shè)置為all則表示所有的頭部信息都匹配才會發(fā)送到指定隊列。這個交換機(jī)工作中不咋用薪夕,好像略微有點雞肋脚草。

Queue

呃,這個其實和普通的隊列沒啥區(qū)別原献,只不過它里面可以設(shè)置一些額外的屬性馏慨,例如持久化、自動刪除等姑隅。有一個地方需要注意写隶,如果不能將AMQP消息路由到任何隊列(例如,路由鍵沒有對應(yīng)的隊列)讲仰,則可以根據(jù)發(fā)布者設(shè)置的消息屬性樟澜,將其刪除或返回給發(fā)布者。這個設(shè)置在保證消息可靠性時是十分重要的叮盘。(關(guān)于如何保證消息可靠性可以看這篇文章RabbitMQ消息可靠性分析

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末秩贰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子柔吼,更是在濱河造成了極大的恐慌毒费,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愈魏,死亡現(xiàn)場離奇詭異觅玻,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)培漏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門溪厘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人牌柄,你說我怎么就攤上這事畸悬。” “怎么了珊佣?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵蹋宦,是天一觀的道長披粟。 經(jīng)常有香客問我,道長冷冗,這世上最難降的妖魔是什么守屉? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮蒿辙,結(jié)果婚禮上拇泛,老公的妹妹穿的比我還像新娘。我一直安慰自己思灌,他們只是感情好俺叭,可當(dāng)我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著习瑰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪秽荤。 梳的紋絲不亂的頭發(fā)上甜奄,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天,我揣著相機(jī)與錄音窃款,去河邊找鬼课兄。 笑死,一個胖子當(dāng)著我的面吹牛晨继,可吹牛的內(nèi)容都是我干的烟阐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼紊扬,長吁一口氣:“原來是場噩夢啊……” “哼蜒茄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起餐屎,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤檀葛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后腹缩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屿聋,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年藏鹊,在試婚紗的時候發(fā)現(xiàn)自己被綠了润讥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡盘寡,死狀恐怖楚殿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情竿痰,我是刑警寧澤勒魔,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布甫煞,位于F島的核電站,受9級特大地震影響冠绢,放射性物質(zhì)發(fā)生泄漏抚吠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一弟胀、第九天 我趴在偏房一處隱蔽的房頂上張望楷力。 院中可真熱鬧,春花似錦孵户、人聲如沸萧朝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽检柬。三九已至,卻和暖如春竖配,著一層夾襖步出監(jiān)牢的瞬間何址,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工进胯, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留用爪,地道東北人。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓胁镐,卻偏偏與公主長得像偎血,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子盯漂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,507評論 2 359

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