消息隊(duì)列概念

一啊犬、消息

1、什么是消息

消息本質(zhì)上是一種數(shù)據(jù)結(jié)構(gòu)(當(dāng)然壁查,對象也可以看做是一種特殊的消息)觉至,它包含消費(fèi)者與服務(wù)雙方都能識別的數(shù)據(jù),這些數(shù)據(jù)需要在不同的進(jìn)程(機(jī)器)之間進(jìn)行傳遞睡腿,并可能會(huì)被多個(gè)完全不同的客戶端消費(fèi)

2语御、消息分類

  • 同步消息 例如:遠(yuǎn)程調(diào)用服務(wù),同步RPC

  • 異步消息 客戶端主服務(wù)不需要等待服務(wù)處理消息席怪,簡單來說就是不阻塞应闯。

3、消息的重要概念

  • 消息代理(message broker)

  • 目的地(destination)

二挂捻、隊(duì)列

1碉纺、概念

隊(duì)列(Queue),是先進(jìn)先出(FIFO, First-In-First-Out)的線性表刻撒,通俗的講隊(duì)列就是一群人或者事物按照排好的順序等待接受服務(wù)或者處理

2骨田、分類

本地隊(duì)列

本地隊(duì)列按照功能可劃分為初始化隊(duì)列,傳輸隊(duì)列疫赎,目標(biāo)隊(duì)列和死信隊(duì)列盛撑。初始化隊(duì)列用作消息觸發(fā)功能。傳輸隊(duì)列只是暫存待傳的消息捧搞,條件許可的情況下,通過管道將消息傳送到其他的隊(duì)列管理器狮荔。目標(biāo)隊(duì)列是消息的目的地胎撇,可以長期存放消息。如果消息不能送達(dá)目標(biāo)隊(duì)列殖氏,也不能再路由出去晚树,則被自動(dòng)放入死信隊(duì)列保存。

別名隊(duì)列&遠(yuǎn)程隊(duì)列

只是一個(gè)隊(duì)列定義雅采,用來指定遠(yuǎn)端隊(duì)列管理器的隊(duì)列爵憎。使用了遠(yuǎn)程隊(duì)列,程序就不需要知道目標(biāo)隊(duì)列的位置婚瓜。

模型隊(duì)列

模型隊(duì)列定義了一套本地隊(duì)列的屬性結(jié)合宝鼓,一旦打開模型隊(duì)列,隊(duì)列管理器會(huì)按照這些屬性動(dòng)態(tài)地創(chuàng)建出一個(gè)本地隊(duì)列巴刻。

三愚铡、消息隊(duì)列

1、什么是MQ

MQ全稱(Message Queue)又名消息隊(duì)列,是一種異步通訊中間件沥寥“幔可以將它理解成郵局,發(fā)送者將消息傳遞到郵局邑雅,然后由郵局幫我們發(fā)送給具體的消息接收者(消費(fèi)者)片橡,具體發(fā)送過程與時(shí)間我們無需關(guān)心,它也不會(huì)干擾我進(jìn)行其它事情淮野。

它被廣泛的應(yīng)用與跨平臺锻全、跨系統(tǒng)的分布式系統(tǒng)之間,為它們提供高效可靠的異步傳輸機(jī)制

2录煤、特點(diǎn)

  • 可靠性傳輸

    是消息中間件的重要特點(diǎn)鳄厌,對于應(yīng)用來說,只要成功把數(shù)據(jù)提交給消息中間件妈踊,那么關(guān)于數(shù)據(jù)可靠傳輸?shù)膯栴}就由消息中間件來負(fù)責(zé)

  • 不重復(fù)傳輸

    不重復(fù)傳播也就是斷點(diǎn)續(xù)傳的功能了嚎,特別適合網(wǎng)絡(luò)不穩(wěn)定的環(huán)境,節(jié)約網(wǎng)絡(luò)資源

  • 異步性傳輸

    異步性傳輸是指廊营,接受信息雙方不必同時(shí)在線歪泳,具有脫機(jī)能力和安全性

  • 消息驅(qū)動(dòng)

    接到消息后主動(dòng)通知消息接收方

  • 支持事務(wù)

    應(yīng)用程序可以把一些數(shù)據(jù)更新組合成一個(gè)工作單元,這些更新通常是邏輯相關(guān)的露筒,為了保障數(shù)據(jù)完整性呐伞,所有的更新必須同時(shí)成功或者同時(shí)失敗

3、應(yīng)用場景

  • 異步-流量削峰

    例如: 在電子商務(wù)一些秒殺慎式、促銷活動(dòng)中

  • 異步-系統(tǒng)解耦

    例如: 發(fā)送短信伶氢、發(fā)送郵件、通知物流等

    備注

    消息隊(duì)列使利用發(fā)布-訂閱模式工作瘪吏,消息發(fā)送者(生產(chǎn)者)發(fā)布消息癣防,一個(gè)或多個(gè)消息接受者(消費(fèi)者)訂閱消息。 消息發(fā)送者(生產(chǎn)者)和消息接受者(消費(fèi)者)之間沒有直接耦合掌眠,消息發(fā)送者將消息發(fā)送至分布式消息隊(duì)列即結(jié)束對消息的處理蕾盯,消息接受者從分布式消息隊(duì)列獲取該消息后進(jìn)行后續(xù)處理,并不需要知道該消息從何而來蓝丙。對新增業(yè)務(wù)级遭,只要對該類消息感興趣,即可訂閱該消息渺尘,對原有系統(tǒng)和業(yè)務(wù)沒有任何影響挫鸽,從而實(shí)現(xiàn)網(wǎng)站業(yè)務(wù)的可擴(kuò)展性設(shè)計(jì)

四沧烈、JMS與AMQP

JMS

JMS(JAVA Message Service,java消息服務(wù))是java的消息服務(wù) JMS是一套 API,是j2EE標(biāo)準(zhǔn)的一部分掠兄。

JMS是由Sun公司早期提出的消息標(biāo)準(zhǔn),旨在為java應(yīng)用提供統(tǒng)一的消息操作,包括create蚂夕、send迅诬、receive等

JMS是Java Enterprise Edition的一部分。從使用角度看婿牍,JMS和JDBC擔(dān)任差不多的角色侈贷,用戶都是根據(jù)相應(yīng)的接口可以和實(shí)現(xiàn)了JMS的服務(wù)進(jìn)行通信,進(jìn)行相關(guān)的操作

消息模型

點(diǎn)到點(diǎn)(P2P)模型

結(jié)構(gòu)圖

xiao'x

說明

使用隊(duì)列(Queue)作為消息通信載體等脂;滿足生產(chǎn)者與消費(fèi)者模式俏蛮,一條消息只能被一個(gè)消費(fèi)者使用,未被消費(fèi)的消息在隊(duì)列中保留直到被消費(fèi)或超時(shí)上遥。比如:我們生產(chǎn)者發(fā)送100條消息的話搏屑,兩個(gè)消費(fèi)者來消費(fèi)一般情況下兩個(gè)消費(fèi)者會(huì)按照消息發(fā)送的順序各自消費(fèi)一半(也就是你一個(gè)我一個(gè)的消費(fèi)。)

發(fā)布/訂閱(Pub/Sub)模型

結(jié)構(gòu)圖

image

說明

發(fā)布訂閱模型(Pub/Sub) 使用主題(Topic)作為消息通信載體粉楚,類似于廣播模式辣恋;發(fā)布者發(fā)布一條消息,該消息通過主題傳遞給所有的訂閱者模软,在一條消息廣播之后才訂閱的用戶則是收不到該條消息的伟骨。

消息數(shù)據(jù)格式

  • StreamMessage -- Java原始值的數(shù)據(jù)流

  • MapMessage--一套名稱-值對

  • TextMessage--一個(gè)字符串對象

  • ObjectMessage--一個(gè)序列化的 Java對象

  • BytesMessage--一個(gè)字節(jié)的數(shù)據(jù)流

AMQP

AMQP(advanced message queuing protocol) 是一個(gè)提供統(tǒng)一消息服務(wù)的應(yīng)用層標(biāo)準(zhǔn)協(xié)議,基于此協(xié)議的客戶端與消息中間件可傳遞消息燃异,并不受客戶端/中間件不同產(chǎn)品携狭,可以跨語法開發(fā)

AMQP是一種協(xié)議,更準(zhǔn)確的說是一種binary wire-level protocol(鏈接協(xié)議),兼容JMS

常見的消息中間件

功能 消息隊(duì)列 RocketMQ Apache RocketMQ (開源) 消息隊(duì)列 Kafka Apache Kafka (開源)
安全防護(hù) 支持 不支持 支持 不支持
主子賬號支持 支持 不支持 支持 不支持
可靠性 - 同步刷盤 - 同步雙寫 - 超3份數(shù)據(jù)副本 - 99.99999999% - 同步刷盤 - 異步刷盤 - 同步刷盤 - 同步雙寫 - 超3份數(shù)據(jù)副本 - 99.99999999% 異步刷盤回俐,丟數(shù)據(jù)概率高
可用性 - 非常好逛腿,99.95% - Always Writable - 非常好,99.95% - Always Writable
橫向擴(kuò)展能力 - 支持平滑擴(kuò)展 - 支持百萬級 QPS 支持 - 支持平滑擴(kuò)展 - 支持百萬級 QPS 支持
Low Latency 支持 不支持 支持 不支持
消費(fèi)模型 Push / Pull Push / Pull Push / Pull Pull
定時(shí)消息 支持(可精確到秒級) 支持(只支持18個(gè)固定 Level) 暫不支持 不支持
事務(wù)消息 支持 不支持 不支持 不支持
順序消息 支持 支持 暫不支持 支持
全鏈路消息軌跡 支持 不支持 暫不支持 不支持
消息堆積能力 百億級別 不影響性能 百億級別 影響性能 百億級別 不影響性能 影響性能
消息堆積查詢 支持 支持 支持 不支持
消息回溯 支持 支持 支持 不支持
消息重試 支持 支持 暫不支持 不支持
死信隊(duì)列 支持 支持 不支持 不支持
性能(常規(guī)) 非常好 百萬級 QPS 非常好 十萬級 QPS 非常好 百萬級 QPS 非常好 百萬級 QPS
性能(萬級 Topic 場景) 非常好 百萬級 QPS 非常好 十萬級 QPS 非常好 百萬級 QPS
性能(海量消息堆積場景) 非常好 百萬級 QPS 非常好 十萬級 QPS 非常好 百萬級 QPS
開發(fā)語言 Java Erlang Java C
客戶端支持語言 Java鲫剿、C鳄逾、 C++、 Python灵莲、 PHP、 Perl殴俱、.net 等 Java政冻、C、 C++线欲、 Python明场、 PHP、 Perl李丰、.net 等 Java C++(不成熟) python苦锨、 java、 php、.net 等
事務(wù) 支持 不支持 支持 不支持
集群 支持 支持 支持 不支持
負(fù)載均衡 支持 支持 支持 不支持
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末舟舒,一起剝皮案震驚了整個(gè)濱河市拉庶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌秃励,老刑警劉巖氏仗,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異夺鲜,居然都是意外死亡皆尔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門币励,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慷蠕,“玉大人,你說我怎么就攤上這事食呻×骺唬” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵搁进,是天一觀的道長浪感。 經(jīng)常有香客問我,道長饼问,這世上最難降的妖魔是什么影兽? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮莱革,結(jié)果婚禮上峻堰,老公的妹妹穿的比我還像新娘。我一直安慰自己盅视,他們只是感情好捐名,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著闹击,像睡著了一般镶蹋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赏半,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天贺归,我揣著相機(jī)與錄音,去河邊找鬼断箫。 笑死拂酣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的仲义。 我是一名探鬼主播婶熬,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼剑勾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了赵颅?” 一聲冷哼從身側(cè)響起虽另,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎性含,沒想到半個(gè)月后洲赵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡商蕴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年叠萍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绪商。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡苛谷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出格郁,到底是詐尸還是另有隱情腹殿,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布例书,位于F島的核電站锣尉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏决采。R本人自食惡果不足惜自沧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望树瞭。 院中可真熱鬧拇厢,春花似錦、人聲如沸晒喷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凉敲。三九已至衣盾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間爷抓,已是汗流浹背雨效。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留废赞,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓叮姑,卻偏偏與公主長得像唉地,于是被迫代替她去往敵國和親据悔。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353