訊息佇列 RocketMQ 01

2022-09-15 02:00:24 字數 1827 閱讀 1800

訊息佇列中介軟體是分布式系統中重要的元件,它主要解決的問題是:應用解耦、非同步訊息、流量削鋒等問題。實現高效能,高可用,可伸縮和最終一致性架構。

目前使用較多的訊息佇列有 activemq、rabbitmq、zeromq、kafka、metamq、rocketmq等。

訊息即資料。一般訊息的體量不會很大。
1. 應用解耦
場景說明:使用者下單後,訂單系統需要通知庫存系統。傳統的做法是,訂單系統呼叫庫存系統的介面。如下圖:

傳統模式的缺點:訂單系統與庫存系統耦合過高,假如庫存系統掛了,暫時無法訪問,則訂單佔庫存將失敗,從而導致訂單建立失敗。

如何解決以上問題呢?引入應用訊息佇列後的方案,如下圖:

訂單系統:使用者下單後,訂單系統完成持久化處理,將下單的訊息寫入訊息佇列,寫入成功後返回使用者訂單下單成功。

庫存系統:訂閱下單的訊息,採用拉/推的方式,獲取下單資訊,庫存系統根據下單資訊,進行庫存的相關操作(佔庫,減庫)。

假如:在下單時庫存系統不能正常使用。那麼也不影響正常下單,因為下單後,訂單系統將下單的訊息寫入訊息佇列後就不再關心其他的後續操作了,實現訂單系統與庫存系統的應用解耦。

2. 流量削鋒

流量削鋒也是訊息佇列的常用場景,一般在秒殺或團搶活動中使用廣泛。

應用場景:秒殺活動,一般會因為某一時刻流量過大,導致流量激增,應用可能掛掉。為解決這個問題,一般需要在應用前端加入訊息佇列。

a、可以控制活動的人數

b、可以緩解短時間內高流量壓垮應用

使用者的請求 ---- 伺服器接收 ---- 首先寫入訊息佇列

假如訊息佇列長度超過了所限定的最大請求數量,則直接拋棄一部分使用者請求或跳轉到錯誤頁面。

秒殺業務根據訊息佇列中的請求資訊,再做後續處理。

3. 日誌處理

日誌處理是指將訊息佇列用在日誌處理中,比如kafka的應用,解決大量日誌傳輸的問題。架構簡化如下

日誌採集客戶端,負責日誌資料採集,定時寫受寫入kafka佇列。

kafka訊息佇列,負責日誌資料的接收,儲存和**。

日誌處理應用:訂閱並消費kafka佇列中的日誌資料。

4. 訊息通訊

訊息通訊是指,訊息佇列一般都內建了高效的通訊機制,因此也可以用在純的訊息通訊。比如實現點對點訊息佇列,或者聊天室等

點對點通訊:

客戶端a和客戶端b使用同一佇列,進行訊息通訊。

聊天室通訊:

客戶端a,客戶端b,客戶端n訂閱同一主題,進行訊息發布和接收。實現類似聊天室效果。

以上實際是訊息佇列的兩種訊息模式,點對點或發布訂閱模式。

1、系統可用性降低。依賴服務也多,服務越容易掛掉。需要考慮mq癱瘓的情況

2、系統複雜性提高。需要考慮訊息丟失、訊息重複消費、訊息傳遞的順序性

3、業務一致性。主業務和從屬業務一致性的處理

rocketmq 訊息佇列

rocketmq 是乙個分布式的訊息佇列,主要有product,broker,consumer,nameserver組成,提供流量的削峰填谷,非同步通知,應用解耦的功能。rocketmq和kafka功能上比較相似,但是在底層架構上還是有很多不同,比如kafka中每個topic下的每個partitio...

訊息佇列之RocketMq

rocketmq 是阿里巴巴在2012年開源的分布式訊息中介軟體,有點什麼的就不多說了,就直接將怎麼用。rocketmq大概就是真麼一種結構,具體的使用流程就是,訊息生產者 producer 將訊息發布到訊息中心,消費者 consumer 啟動監聽,當監聽到訊息時去訊息中心拿訊息。而nameserv...

訊息佇列(三)RocketMQ如何儲存訊息

rocket的訊息是有consume queue和commit log組成。consume queue consume queue是訊息的邏輯佇列,相當於字典目錄,用來指定訊息在物理檔案 commit log 上的位置,我們可以在配置中指定consumequeue和commitlog儲存的目錄。每乙...