Message Queue 消息隊(duì)列

消息隊(duì)列概述

消息隊(duì)列是系統(tǒng)中重要的中間件,主要解決應(yīng)用耦合,異步消息,高并發(fā)等問題。實(shí)現(xiàn)高性能,高可用,可伸縮和最終一致性架構(gòu)。

應(yīng)用場(chǎng)景

異步處理場(chǎng)景

串行模式

在串行模式中,用戶注冊(cè)成功寫入數(shù)據(jù)庫(kù)之后,會(huì)發(fā)站內(nèi)信,然后發(fā)短信通知。串行處理任務(wù)完成Respose給用戶。


并行模式

在并行模式中,用戶注冊(cè)成之后寫入數(shù)據(jù)庫(kù)之后,將發(fā)站內(nèi)信、短信的任務(wù)寫入消息隊(duì)列中,供其他系統(tǒng)的去讀取處理。

業(yè)務(wù)解耦場(chǎng)景

一般處理

引入消息隊(duì)列后

在系統(tǒng)間引入MQ可以降低系統(tǒng)的耦合度,提高系統(tǒng)的高可用。

高并發(fā)場(chǎng)景

高并發(fā)

面對(duì)高并發(fā)請(qǐng)求,引入MQ,可以控制請(qǐng)求人數(shù),緩解短時(shí)間高流量搞垮系統(tǒng)

JMS消息服務(wù)

JMS消息模型

P2P模型
P2P模型

每個(gè)消息只有一個(gè)消費(fèi)者(Consumer)(即一旦被消費(fèi),消息就不再在消息隊(duì)列中)
發(fā)送者和接收者之間在時(shí)間上沒有依賴性,也就是說當(dāng)發(fā)送者發(fā)送了消息之后,不管接收者有沒有正在運(yùn)行,它不會(huì)影響到消息被發(fā)送到隊(duì)列
接收者在成功接收消息之后需向隊(duì)列應(yīng)答成功

Pub/Sub模式
Pub/Sub模式

每個(gè)消息可以有多個(gè)消費(fèi)者
發(fā)布者和訂閱者之間有時(shí)間上的依賴性。針對(duì)某個(gè)主題的訂閱者,它必須創(chuàng)建一個(gè)訂閱者之后,才能消費(fèi)發(fā)布者的消息。
為了消費(fèi)消息,訂閱者必須保持運(yùn)行的狀態(tài)。

常用的MQ

ActiveMQ

⒈ 多種語言和協(xié)議編寫客戶端。
語言: Java,C,C++,C#,Ruby,Perl,Python,PHP。
應(yīng)用協(xié)議: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
⒉ 完全支持JMS1.1和J2EE 1.4規(guī)范 (持久化,XA消息,事務(wù))
⒊ 對(duì)Spring的支持
⒋ 通過了常見J2EE服務(wù)器(如 Geronimo,JBoss 4,GlassFish,WebLogic)的測(cè)試,其中通 過JCA 1.5 resource adaptors的配置,可以讓ActiveMQ可以自動(dòng)的部署到任何兼容J2EE 1.4 商業(yè)服務(wù)器上
⒌ 支持多種傳送協(xié)議:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
⒍ 支持通過JDBC和journal提供高速的消息持久化
⒎ 從設(shè)計(jì)上保證了高性能的集群,客戶端-服務(wù)器,點(diǎn)對(duì)點(diǎn)
⒏ 支持Ajax
⒐ 支持與Axis的整合
⒑ 可以很容易得調(diào)用內(nèi)嵌JMS provider,進(jìn)行測(cè)試

RabbitMQ

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

用于在分布式系統(tǒng)中存儲(chǔ)轉(zhuǎn)發(fā)消息,在易用性、擴(kuò)展性、高可用性等方面表現(xiàn)不俗。

Kafka

Kafka是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng),它可以處理消費(fèi)者規(guī)模的網(wǎng)站中的所有動(dòng)作流數(shù)據(jù)。即使是非常普通的硬件Kafka也可以支持每秒數(shù)百萬的消息。一般應(yīng)用在大數(shù)據(jù)日志處理或?qū)?shí)時(shí)性(少量延遲),可靠性(少量丟數(shù)據(jù))要求稍低的場(chǎng)景使用。

Kafka結(jié)構(gòu)圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、 消息隊(duì)列概述 消息隊(duì)列中間件是分布式系統(tǒng)中重要的組件,主要解決應(yīng)用耦合、異步消息、流量削鋒等問題。實(shí)現(xiàn)高性能...
    步積閱讀 57,443評(píng)論 10 138
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,616評(píng)論 19 139
  • 1 消息隊(duì)列概述 消息隊(duì)列中間件是分布式系統(tǒng)中重要的組件,主要解決應(yīng)用耦合,異步消息,流量削鋒等問題。實(shí)現(xiàn)高性能,...
    Bobby0322閱讀 11,057評(píng)論 0 24
  • 一、消息隊(duì)列概述 消息隊(duì)列中間件是分布式系統(tǒng)中重要的組件,主要解決應(yīng)用解耦,異步消息,流量削鋒等問題,實(shí)現(xiàn)高性能,...
    GoGooGooo閱讀 2,037評(píng)論 1 5
  • 當(dāng)你在乎了就意味著傷害將要到來了,電影中常常會(huì)聽到的一句話即“有人的地方,就有江湖?!比伺c人的交往,就是江湖。...
    只愿靜好安然閱讀 190評(píng)論 0 0

友情鏈接更多精彩內(nèi)容