★訊息佇列16篇
1 領域模型
Apache RocketMQ 是一款典型的分散式架構下的訊息中介軟體產品,使用非同步通訊方式和釋出訂閱的訊息傳輸模型。 Apache RocketMQ 產品具備非同步通訊的優勢,系統拓撲簡單、上下游耦合較弱,主要應用於非同步解耦,流量削峰填谷等場景。
說明:以上圖片來自官網
如上,RocketMQ 中訊息的生命週期主要分為訊息生產、訊息儲存、訊息消費這三部分:
- 生產者生產訊息併傳送至 Apache RocketMQ 服務端
- 訊息被儲存在服務端的主題中
- 消費者透過訂閱主題消費訊息
1.1 訊息生產
生產者(Producer):RocketMQ 中用於產生訊息的執行實體,一般整合於業務呼叫鏈路的上游。
1.2 訊息儲存
- 主題(Topic):RocketMQ 訊息傳輸和儲存的分組容器,主題內部由多個佇列組成,訊息的儲存和水平擴充套件實際是透過主題內的佇列實現的。
- 佇列(MessageQueue):RocketMQ 訊息傳輸和儲存的實際單元容器,類比於其他訊息佇列中的分割槽,流式順序性儲存特徵。
- 訊息(Message): RocketMQ 的最小傳輸單元。訊息具備不可變性,在初始化傳送和完成儲存後即不可變。
1.3 訊息消費
-
消費者分組(ConsumerGroup):
Apache RocketMQ 釋出訂閱模型中定義的獨立的消費身份分組,用於統一管理底層執行的多個消費者(Consumer)。同一個消費組的多個消費者必須保持消費邏輯和配置一致,共同分擔該消費組訂閱的訊息,實現消費能力的水平擴充套件。 -
消費者(Consumer):
Apache RocketMQ 消費訊息的執行實體,一般整合在業務呼叫鏈路的下游。消費者必須被指定到某一個消費組中。 -
訂閱關係(Subscription):
Apache RocketMQ 釋出訂閱模型中訊息過濾、重試、消費進度的規則配置。訂閱關係以消費組粒度進行管理,消費組透過定義訂閱關係控制指定消費組下的消費者如何實現訊息過濾、消費重試及消費進度恢復等。
RocketMQ 的訂閱關係除過濾表示式之外都是持久化的,即服務端重啟或請求斷開,訂閱關係依然保留。
2 通訊方式介紹
分散式系統架構思想下,將複雜系統拆分為多個獨立的子模組,例如微服務模組。此時就需要考慮子模組間的遠端通訊,典型的通訊模式分為以下兩種,一種是同步的RPC遠端呼叫;一種是基於中介軟體代理的非同步通訊方式。
2.1 同步RPC呼叫模型
同步RPC呼叫模型下,不同系統之間直接進行呼叫通訊,每個請求直接從呼叫方傳送到被呼叫方,然後要求被呼叫方立即返回響應結果給呼叫方,以確定本次呼叫結果是否成功。
2.2 非同步通訊模型
非同步訊息通訊模式下,各子系統之間無需強耦合直接連線,呼叫方只需要將請求轉化成非同步事件(訊息)傳送給中間代理,傳送成功即可認為該非同步鏈路呼叫完成,中介軟體會確保任務執行完成。他有如下優勢:
- 系統拓撲簡單:統一的中間代理通訊,系統是星型結構,易於維護和管理。
- 上下游解耦 :上下游可以獨立升級和變更,不會互相影響。
- 容量削峰填谷:避免高峰帶來過載
3 訊息傳輸模型介紹
主流的訊息中介軟體的傳輸模型主要為點對點模型和釋出訂閱模型,RocketMQ也不例外。
3.1 對點模式(Point To Point)
在點對點模式下,每個訊息只能被一個消費者消費,一旦訊息被消費,它就會從佇列中刪除。這種模式下,訊息的生產者和消費者之間沒有依賴性,生產者傳送訊息後,無論是否有消費者接收,都不會影響下一次傳送訊息。點對點模式適用於需要確保每條訊息只被消費一次的場景,例如訂單處理、支付確認等。
3.2 釋出訂閱模式(BroadCast)
在釋出訂閱模式下,每個訊息可以被多個消費者消費。訊息生產者將訊息釋出到主題(Topic)上,所有訂閱該主題的消費者都能接收到這條訊息。這種模式下,生產者不需要關心有多少消費者,只需要傳送訊息即可。釋出訂閱模式適用於需要廣播訊息給多個消費者的場景,例如實時通知、日誌收集等。
3.3 適用場景和優缺點
點對點模式:適用於需要確保每條訊息只被消費一次的場景,優點是訊息傳遞可靠,缺點是擴充套件性較差,不適合大量消費者同時消費的情況。
釋出訂閱模式:適用於需要廣播訊息給多個消費者的場景,優點是擴充套件性好,可以支援大量消費者同時消費,缺點是訊息可能會被重複消費,需要額外的機制來處理這種情況。
3.4 實際應用案例
點對點模式:在訂單處理系統中,每個訂單的建立、支付等操作可以看作是一個獨立的訊息,確保每個訂單的處理過程不會相互影響。
釋出訂閱模式:在實時通知系統中,當有新的事件發生時,可以將訊息釋出到主題上,所有訂閱該主題的客戶端都能實時接收到通知。
透過了解這兩種模式的定義、區別和適用場景,可以更好地選擇適合自己需求的訊息佇列模式。
5 總結
瞭解RockectMQ的基本組成、通訊方式、訊息傳輸模型