消息中間件MQ詳解

1 消息中間件介紹

通常,咱們認爲消息中間件是指支持與保障分佈式應用程序之間同步/異步收發消息的中間件。消息是分佈式應用之間進行數據交換的基本信息單位,分佈式應用程序之間的通訊接口由消息中間件提供。其中,異步方式指消息發送方在發送消息時沒必要知道接收方的狀態,更無需等待接收方的回覆,而接收方在收到消息時也沒必要知道發送方的目前狀態,更無需進行同步的消息處理,它們之間的鏈接徹底是鬆耦合的,通訊是非阻塞的,這種異步通訊方式是由消息中間件中的消息隊列及其服務機制保障的。通常地,實時性要求較高的業務採用同步方式處理,實時性要求不高的業務採用異步方式進行處理。緩存

消息中間件已普遍應用於各種分佈式應用系統,消息中間件開始向發佈/訂閱架構轉變,併成爲企業應用集成中間件的一種核心機制,而基於發佈/訂閱架構的消息中間件一般稱爲發佈/訂閱消息中間件或消息代理。目前比較典型的消息中間件包括IBM WebSphere MQSeries、阿里的RocketMQ和Kafka等。架構

消息中間件是在消息的傳輸過程當中保存信息的容器。消息中間件再將消息從它的源中繼到它的目標時充當中間人的做用。隊列的主要目的是提供路由並保證消息的傳遞;若是發送消息時接收者不可用,消息隊列會保留消息,直到能夠成功地傳遞它爲止,固然,消息隊列保存消息也是有期限的。異步

2 消息中間件的特色

2.1 採用異步處理模式

消息發送者能夠發送一個消息而無須等待響應。消息發送者將消息發送到一條虛擬的通道(主題或隊列)上,消息接收者則訂閱或是監聽該通道。一條信息可能最終轉發給一個或多個消息接收者,這些接收者都無需對消息發送者作出同步迴應。整個過程都是異步的。分佈式

2.2 應用程序和應用程序調用關係爲鬆耦合關係

主要體如今以下兩點:
(1)發送者和接受者沒必要了解對方、只須要確認消息
(2)發送者和接受者沒必要同時在線
好比在線交易系統爲了保證數據的最終一致,在支付系統處理完成後會把支付結果放到消息中間件裏通知訂單系統修改訂單支付狀態。兩個系統經過消息中間件解耦。ide

3 消息傳遞服務模型

消息傳遞服務模型以下圖所示
消息中間件MQ詳解性能

4 消息中間件的傳輸模式

4.1 點對點模型

點對點模型用於消息生產者和消息消費者之間點到點的通訊。消息生產者將消息發送到由某個名字標識的特定消費者。這個名字實際上對於消費服務中的一個隊列(Queue),在消息傳遞給消費者以前它被存儲在這個隊列中。隊列消息能夠放在內存中也能夠是持久的,以保證在消息服務出現故障時仍然可以傳遞消息。網站

傳統的點對點消息中間件一般由消息隊列服務、消息傳遞服務、消息隊列和消息應用程序接口API組成,其典型的結構以下圖所示。
消息中間件MQ詳解代理

特色:
(1)每一個消息只用一個消費者
(2)發送者和接受者沒有時間依賴
(3)接受者確認消息接受和處理成功
示意圖以下所示:
消息中間件MQ詳解日誌

4.2 發佈-訂閱模型(Pub/Sub)

發佈者/訂閱者模型支持向一個特定的消息主題生產消息。0或多個訂閱者可能對接收來自特定消息主題的消息感興趣。在這種模型下,發佈者和訂閱者彼此不知道對方。這種模式就比如是匿名公告板。這種模式被概況爲:多個消費者能夠得到消息,在發佈者和訂閱者之間存在時間依賴性。發佈者須要創建一個訂閱(subscription),以便可以消費者訂閱。訂閱者必須保持持續的活動狀態及接收消息,除非訂閱者創建了持久的訂閱。在這種狀況下,在訂閱者未鏈接時發佈的消息將在訂閱者從新鏈接時從新發布。以下圖所示:
消息中間件MQ詳解中間件

發佈/訂閱模型特性
(1)每一個消息能夠有多個訂閱者
(2)客戶端只有訂閱後才能接收到消息
(3)持久訂閱和非持久訂閱

注意:
(1)發佈者和訂閱者有時間依賴
接受者和發佈者只有創建訂閱關係才能收到消息
(2)持久訂閱
訂閱關係創建後,消息就不會消失,無論訂閱者是否都在線
(3)非持久訂閱
訂閱者爲了接受消息,必須一直在線。
當只有一個訂閱者時約等於點對點模式

5 消息中間件應用場景

5.1 用戶註冊異步處理

網站用戶註冊,註冊成功後會過一會發送郵件確認或者短息
消息中間件MQ詳解

5.2 日誌分析使用

把日誌進行集中收集,用於計算PV、用戶行爲分析
消息中間件MQ詳解

5.3 數據複製

(1)將數據從源頭複製到多個目的地,通常是要求順序或者保證因果序列
(2)用於跨機房數據傳輸、搜索、離線數據計算等。
消息中間件MQ詳解

5.4 延遲消息發送和暫存

(1)把消息中間件當成可靠的消息暫存地
(2)定時進行消息投遞,好比模擬用戶秒殺訪問,進行系統性能壓測
消息中間件MQ詳解

5.5 消息廣播

(1)緩存數據同步更新
(2)往應用推送數據
好比更新本地緩存:
消息中間件MQ詳解

6 消息中間件消息模型分類

6.1 push推消息模型

消息生產者將消息發送給消息傳遞服務,消息傳遞服務又將消息推給消息消費者。

6.2 pull拉消息模型

消費者請求消息服務接受消息,消息生產者從消息中間件拉該消息。

6.3 兩種類型的區別

push推消息和pull拉消息的區別
消息中間件MQ詳解

下面的是個人公衆號二維碼圖片,歡迎關注。文章轉載請註明出處www.leexide.com
消息中間件MQ詳解

相關文章
相關標籤/搜索