消息隊列MessageQueue最全詳解(MQ萬字圖文總結)
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
消息隊列是大型高并發架構的核心,也是大廠重點考察的對象,下面我就全面來詳解消息隊列。 消息隊列消息隊列,全稱是:“MessageQueue”,很多時候我們也簡稱為:“ MQ”,本質就是一個保存消息的隊列。 如下圖所示: 允許不同的應用程序通過發送、和接收消息進行數據交換,從而實現系統解耦、提高系統可擴展性、和性能。 主要解決以下幾點問題: 1.異步通信 異步通信是指:系統中的組件通過消息隊列,進行異步消息傳遞,發送者不需要等待接收者處理完畢,即可繼續執行其他任務。 比如:郵件服務異步發送郵件給用戶,注冊服務立即返回響應給用戶,而不必等待郵件發送完成,這就是典型的”異步通信“。 2.解耦 消息隊列使生產者,和消費者之間解耦,生產者只需將消息發送到消息隊列中,而不需要知道消息的最終處理者是誰。 這種解耦使得系統組件之間的依賴關系減少,提高了系統的靈活性、和可維護性。 3.可靠性 消息隊列可以保證消息的可靠傳輸,比如:可以通過持久化、和確認機制,確保消息不丟失。 4.流量削峰 消息隊列可以緩解突發流量對系統的壓力,比如:在搶購活動中,訂單請求量在短時間內激增。 消息隊列:可以暫存這些訂單請求,后臺服務按能力逐步處理,防止系統癱瘓,這就是典型的”流量削峰“。 總之,消息隊列可以用于:解耦、異步處理、削峰填谷、和可靠傳輸...等場景,使得它在現代分布式系統、和微服務架構中成為關鍵組件。 消息隊列原理消息隊列的實現,如下圖所示: MQ的整體架構通常包括以下幾個組件: 生產者(Producer): 生產者:是負責生成、和發送消息到消息隊列的應用程序、或組件。 生產者可以是任何生成數據的系統部分,比如:用戶操作觸發的事件、定時任務、數據采集系統。。。等。 還是舉一個例子:在電子商務系統中,訂單服務在用戶提交訂單后生成訂單消息,并將其發送到訂單處理隊列中,這就是生產者。 消息代理(Broker): 生產者將生成的消息,發送到消息代理(Broker),并指定消息應存儲的隊列、或主題。 這里的代理(Broker):就是負責消息接收、存儲、和分發消息的中間件。
消息隊列(Queue): queue就是:存儲消息的容器,按照一定順序傳遞消息。 消費者(Consumer): 這個沒什么可說的,就是消費者:從消息隊列讀取并處理消息的應用程序、或組件。 消息體(Message): 消息的內容,包括消息頭(metadata)和消息體(payload)。
消息冪等性 除了考慮上面的設計外,還需要考到如何避免重復處理。 比如:如何確保消費者處理消息時具備冪等性,即同一消息多次處理不會造成副作用。 可以通過消息ID、狀態記錄等手段實現冪等性。 去重策略 對于可能重復的消息,設計去重策略,確保同一消息只被處理一次。 消息隊列類型消息隊列主要包含兩種,一個是”點對點“,一個是”發布訂閱模型“。 1.點對點 在點對點模型中,消息在隊列中存儲,只有一個消費者可以消費該消息,一旦消息被消費,它就會從隊列中移除。 應用場景:
2.發布/訂閱 在發布訂閱模型中,消息發布者將消息發送到主題(Topic),所有訂閱該主題的消費者都可以接收到消息。 如下圖所示: 每條消息可以被多個消費者消費,消息不會因為被某個消費者讀取而刪除。 發布訂閱模型包含三個角色:
應用場景:
3.點對點模式和發布訂閱模式的區別主要體現在如下3點: 1、消息接收者的區別 點對點:每條消息只被一個消費者接收和處理。 發布訂閱:每條消息可以被,多個訂閱者接收、和處理。 2、消息存儲方式的區別 點對點:消息存儲在隊列中,消費者讀取后消息從隊列中刪除。 發布訂閱:消息存儲在主題中,所有訂閱者接收完消息后消息才會刪除。 3、適用場景的區別 點對點:適用于需要保證消息只處理一次的場景,如:任務處理、訂單處理。 發布訂閱:適用于需要廣播消息的場景,如:日志收集、事件通知。 常用的消息隊列?以下是一些常用的消息隊列系統: 1.RabbitMQ RabbitMQ是基于AMQP協議的開源消息代理,具有高可靠性、靈活的路由功能和豐富的插件。 采用Erlang語言開發,支持集群和高可用性配置。 廣泛應用于微服務架構、異步通信、消息分發和實時數據處理。 2.Apache Kafka Kafka是Apache的分布式流處理平臺,具有高吞吐量、低延遲、持久化和水平擴展能力。 架構:采用分區和副本機制,保證高可用和數據可靠性。 應用:適用于實時數據流處理、日志收集、事件驅動系統和大數據分析。 性能:極高的吞吐量和低延遲,適用于大規模數據流處理、和分析場景。 3.ActiveMQ ActiveMQ是Apache基金會的開源消息中間件,支持JMS規范,具有高性能、可靠性和靈活性。 適用于中等到高負載的場景,性能較為穩定,但在高吞吐量場景下不如Kafka。 4.RocketMQ RocketMQ是Apache的分布式消息中間件,最早是阿里開發的,具有高性能、低延遲、可靠性和水平擴展性。 架構:基于分布式架構,支持順序消息、事務消息和定時消息。 應用:廣泛應用于金融、電子商務和大數據領域。 性能:高吞吐量和低延遲,適用于大規模消息處理和傳輸。 5.Apache Pulsar Pulsar是Apache的分布式消息流平臺,支持多租戶、水平擴展和低延遲。 采用多層架構,分為存儲層和計算層,支持分區和副本機制。 適用于實時數據處理、日志收集和事件流處理,具有高吞吐量、低延遲,適用于大規模實時數據流處理。 閱讀原文:原文鏈接 該文章在 2025/7/2 0:01:11 編輯過 |
關鍵字查詢
相關文章
正在查詢... |