消息中間件的 "Style"

前情提要

? 現(xiàn)如今,消息中間件已經(jīng)在很多公司的業(yè)務(wù)中被廣泛使用:業(yè)務(wù)解耦玖详,消峰填谷把介,對(duì)接大數(shù)據(jù),流式計(jì)算等等各種玩法層出不窮蟋座。伴隨著消息中間件的使用拗踢,你一定還聽(tīng)過(guò) "消息隊(duì)列",“pub-sub”這些名詞向臀,我們今天就來(lái)聊一下這些消息中間件提供給業(yè)務(wù)的可使用的 "Style"巢墅。

概述

? 不管如何使用消息中間件,其實(shí)都可以歸結(jié)到兩個(gè)步驟:消息的產(chǎn)生和消費(fèi)。消息中間件作為一種消息的暫存(當(dāng)前也可以持久存儲(chǔ))系統(tǒng)君纫,解耦消息的上下游驯遇,通過(guò)自身提供的高吞吐量,穩(wěn)定可靠性蓄髓,分布式可擴(kuò)展性等一系列特性保證消息被業(yè)務(wù)合理正確處理妹懒。

? 消息中間件依照消息數(shù)據(jù)如何從生產(chǎn)者移動(dòng)到消費(fèi)者可提供多種不同的“Style”,我們這里介始兩種最常見(jiàn)的Style: 消息隊(duì)列方式(Message queuing) 和 發(fā)布訂閱(publish-subscribe)方式双吆。

消息隊(duì)列方式

? 隊(duì)列方式,就是Message queuing会前。

? 我舉個(gè)例子好乐,我們?cè)趯懲瑫r(shí)處理大量任務(wù)的代碼時(shí),經(jīng)常會(huì)使用work線程池瓦宜,再搭配上一個(gè)任務(wù)隊(duì)列蔚万,有任務(wù)要處理時(shí)塞進(jìn)這個(gè)任務(wù)隊(duì)列,然后work線程池中的空閑線程就不斷地從這個(gè)任務(wù)隊(duì)列里取出任務(wù)作處理临庇。這里的每個(gè)work線程就可以看成是消息的消費(fèi)者反璃,一個(gè)任務(wù)只能被其中一個(gè)work線程處理,每個(gè)任務(wù)的處理過(guò)程有快有慢假夺,先被work線程取走的任務(wù)不一定先被完成淮蜈。

? 有張圖來(lái)形象地說(shuō)明一下:

IMG_20200212_143320 (2).jpg

到這里我們可以看到對(duì)于隊(duì)列方式,同一個(gè)topic的各個(gè)消息是被各消費(fèi)者分?jǐn)傁⒌囊丫恚瑸榱朔乐瓜⒈恢貜?fù)消費(fèi)梧田,通常在消費(fèi)者獲取到消息或處理完消息后對(duì)MQ中的消息作刪除或標(biāo)記。

如果消息隊(duì)列中的消費(fèi)堆積過(guò)多侧蘸,我們可以通過(guò)擴(kuò)容當(dāng)前的消費(fèi)者裁眯,來(lái)增加消息消費(fèi)的吞吐量。

通過(guò)對(duì)于無(wú)狀態(tài)的應(yīng)用更常使用這種方式讳癌,因此它們不要求按順序來(lái)消費(fèi)消息數(shù)據(jù)穿稳,它們更多地是希望能有更好的并發(fā)消費(fèi)能力和吞吐量。

很多消息系統(tǒng)將topic分成若干個(gè)partition, 為了增加消費(fèi)的吞吐量晌坤,會(huì)一味調(diào)大partition個(gè)數(shù)逢艘,這種方式需要綜合考量,成本方面不一定是最優(yōu)的

發(fā)布-訂閱方式

? 發(fā)布-訂閱方式泡仗,就是常說(shuō)的pub-sub方式埋虹。

? 發(fā)布者push消息到消息中間件里的某個(gè)topic上,各個(gè)訂閱者都會(huì)收到這個(gè)topic上的完整的消息娩怎,即每個(gè)訂閱者都能看到一樣的完整的topic視圖搔课,并且收到的消息的順序和消息被push到消息中間件時(shí)的順序是一致的。

? 我們舉個(gè)例子,比如訂閱報(bào)紙爬泥,每個(gè)訂閱者的信箱里每天都會(huì)收到相同的報(bào)紙柬讨,而且報(bào)紙肯定是按時(shí)間先后收到。

? 有張圖來(lái)形象地說(shuō)明一下:

IMG_20200212_145406 (2).jpg

發(fā)布-訂閱方式可以保證訂閱者接收到消息的順序袍啡,這在某些場(chǎng)景下非常有用踩官。比如它可以用來(lái)同步數(shù)據(jù)庫(kù)的binlog, 訂閱者通過(guò)這個(gè)binlog可以作數(shù)據(jù)庫(kù)同步。

境输。

常見(jiàn)消息中間件
  • Apache ActiveMQ, Amazon SQS, IBM Websphere MQ, RabbitMQ, 和 RocketMQ 基本上是 消息隊(duì)列方式蔗牡;

  • Apache Kafka這個(gè)比較有意思,它兩種style其實(shí)都支持嗅剖。如果你用來(lái)kafka, 那你一定知道在消費(fèi)時(shí)它有個(gè)consumer group的概念辩越。

    1. 同一個(gè) consumer group里可以包括多個(gè)consumer, 這些同屬一個(gè)group的consumer消費(fèi)數(shù)據(jù)屬于消息隊(duì)(message queuing)的方式;
    2. 如果將每一個(gè)consumer group看作是一個(gè)整體信粮,假設(shè)不存在內(nèi)部的consumer, 即把這個(gè)consumer group看作就是一個(gè)consumer 黔攒, 那不同的consumer group消費(fèi)數(shù)據(jù)就可看作是發(fā)布-訂閱(pub-sub)方式;

    現(xiàn)在各種消息中間件很多很多强缘,又存在不同的style, 我們?cè)谶x擇的時(shí)候還是要根據(jù)自己業(yè)務(wù)的需求來(lái)評(píng)估選擇督惰。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市旅掂,隨后出現(xiàn)的幾起案子赏胚,更是在濱河造成了極大的恐慌,老刑警劉巖辞友,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栅哀,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡称龙,警方通過(guò)查閱死者的電腦和手機(jī)留拾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鲫尊,“玉大人痴柔,你說(shuō)我怎么就攤上這事∫呦颍” “怎么了咳蔚?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)搔驼。 經(jīng)常有香客問(wèn)我谈火,道長(zhǎng),這世上最難降的妖魔是什么舌涨? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任糯耍,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘温技。我一直安慰自己革为,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布舵鳞。 她就那樣靜靜地躺著震檩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蜓堕。 梳的紋絲不亂的頭發(fā)上抛虏,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音套才,去河邊找鬼嘉蕾。 笑死,一個(gè)胖子當(dāng)著我的面吹牛霜旧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播儡率,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼挂据,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了儿普?” 一聲冷哼從身側(cè)響起崎逃,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎眉孩,沒(méi)想到半個(gè)月后个绍,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡浪汪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年巴柿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片死遭。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡广恢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出呀潭,到底是詐尸還是另有隱情钉迷,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布钠署,位于F島的核電站糠聪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏谐鼎。R本人自食惡果不足惜舰蟆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧夭苗,春花似錦信卡、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至界赔,卻和暖如春丢习,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背淮悼。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工咐低, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人袜腥。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓见擦,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親羹令。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鲤屡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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