訊息佇列MQ最全詳解(萬字圖文總結)

码农谈IT發表於2024-03-06

來源:mikechen的網際網路架構


訊息佇列MQ是網際網路架構的基石,大量應用於類似:阿里雙11等併發場景,下面我就全面來詳解MQ訊息佇列

訊息佇列MQ

訊息佇列(Message Queue,簡稱MQ)是一種用於在軟體系統之間傳遞訊息的通訊方式。

如下圖所示:

訊息佇列MQ最全詳解(萬字圖文總結)

訊息通常包含了:要傳遞的資訊,可以是文字、二進位制資料、JSON、XML等格式。

可以是任何形式的資訊,例如:訂單資訊、日誌記錄、事件等,都可以進行傳輸。

訊息佇列MQ如今在網際網路的應用非常廣泛,下面我會全面來詳解訊息佇列MQ@mikechen

訊息佇列MQ架構

一.整體架構

訊息佇列MQ的整體架構,如下圖所示:

訊息佇列MQ最全詳解(萬字圖文總結)

主要會包含:生產者Producer、Broker、消費Consumer。

1.生產者Producer

生產者:是系統中負責建立,併傳送訊息到訊息佇列的元件。

生產者的主要責任包括:

  • 建立訊息:構造訊息體並新增必要的後設資料,例如:訊息標識、時間戳等。

  • 將訊息傳送到訊息佇列:將訊息傳送到指定的佇列或主題,將訊息傳遞給中介軟體。

2.訊息體

訊息體是訊息中的實際資料,它包含了:需要在生產者和消費者之間傳遞的資訊。

訊息體的內容可以是:文字、JSON、二進位制資料等,具體格式取決於應用的需求。

3.Broker

Broker中介軟體:負責接收、儲存和傳遞訊息。

如下圖所示:

訊息佇列MQ最全詳解(萬字圖文總結)

Broker,充當了生產者和消費者之間的中介。

主要職責包括:

1)接收訊息

從生產者接收訊息,並將其儲存在訊息佇列中。

2)管理訊息

維護訊息佇列的後設資料,確保訊息按照規定的順序傳遞。

3)將訊息傳遞給消費者

將訊息傳遞給,訂閱了相關佇列或主題的消費者

總之,Broker是訊息佇列(Message Queue)中的一個重要元件,它充當了訊息的中間人,負責協調和管理訊息的傳遞。

4.消費者Consumer

消費者(Consumer)是訊息佇列系統中的一個重要元件,其主要責任是訂閱訊息佇列中的訊息,並進行處理。

以下是一些常見的訊息佇列中的消費方式:

1.Push模式

在Push模式中,訊息佇列主動將訊息推送給消費者。

一旦訊息佇列接收到訊息,它立即將訊息推送給已經訂閱了該佇列或主題的消費者, 這樣的方式使得消費者能夠即時地獲取訊息。

2.Pull模式

在Pull模式中,消費者主動從訊息佇列中拉取訊息。,消費者根據需要向訊息佇列請求訊息,然後進行處理。

3.批次拉取

一些訊息佇列系統支援批次拉取訊息,即消費者可以一次性獲取多個訊息。

4.定時拉取

消費者可以定時地按照一定的頻率拉取訊息,而不是實時處理,這種方式適用於一些場景,例如:需要按照固定間隔處理訊息的情況。

訊息佇列MQ型別

訊息佇列型別,主要會包含:點對點模型和訂閱-釋出模型。

1.點對點模型

點對點模型,是一對一關係,如下圖所示:

訊息佇列MQ最全詳解(萬字圖文總結)

在點對點模型中,一條訊息只會被一個消費者消費, 即使有多個消費者訂閱了同一個佇列,每條訊息也只會被其中一個消費者接收。

適用於任務分發模式,每個任務只被一個消費者執行的場景,這種模型常見於一些任務分配、請求-響應等場景。

2.訂閱-釋出模型

訂閱-釋出模型,全稱是Publish-Subscribe Model,是訊息佇列中一種常見的訊息傳遞模型,也被稱為釋出訂閱模型。

如下圖所示:

訊息佇列MQ最全詳解(萬字圖文總結)

特點:

  1. 一對多關係: 每條訊息可以被多個消費者接收。

  2. 主題(Topic): 訊息被髮布到一個主題,而訂閱者可以選擇訂閱特定的主題。

  3. 釋出者(Publisher): 生產者或釋出者,負責將訊息釋出到一個或多個主題。

  4. 訂閱者(Subscriber): 消費者或訂閱者,可以選擇訂閱一個或多個主題,以接收發布到這些主題的訊息。

流程:

  1. 釋出訊息: 釋出者將訊息釋出到一個特定的主題,如"新聞"或"實時通知"。

  2. 訂閱主題: 訂閱者,選擇訂閱感興趣的主題,比如:訂閱"新聞"主題。

  3. 訊息傳遞: 當釋出者釋出與訂閱者已訂閱的主題相關的訊息時,訂閱者將接收到這些訊息。

應用場景:

  1. 實時廣播: 適用於需要將訊息廣播給多個消費者的場景,例如:實時通知、廣播訊息等。

  2. 事件驅動: 用於實現事件驅動架構。

  3. 分散式系統整合: 在分散式系統中,釋出-訂閱模型可以用於實現元件之間的松耦合通訊,提高系統的靈活性和可擴充套件性。

3.點對點和釋出訂閱的區別

點對點模型適用於一對一的場景,關注直接連線的點對點關係,而釋出訂閱模型適用於一對多的場景。

點對點模型

著重於訊息的直接傳遞,訊息的生產者和消費者之間直接連線。

這種模型通常強調點對點的關係,訊息的生產者和消費者之間是一對一的。

釋出訂閱模型

著重於訊息的廣播和分發,訊息的釋出者和訂閱者之間透過主題進行間接連線。

這種模型通常強調一對多的關係,一個訊息可以被多個訂閱者接收。

5大常用訊息佇列MQ


1.ActiveMQ
訊息佇列MQ最全詳解(萬字圖文總結)

特點:

  • 支援JMS規範,實現了Java語言的訊息中介軟體。

  • 提供點對點(P2P)和釋出-訂閱(Pub/Sub)兩種訊息傳遞模型。

  • 提供高階特性,如事務、永續性、訊息過濾、訊息導向等。

  • 多語言支援,適用於Java、C++, .NET等。

應用:

  • 適用於Java環境下的分散式系統,企業級應用中的訊息傳遞和非同步通訊。

效能:

  • 效能在萬級/秒。

2.RabbitMQ
訊息佇列MQ最全詳解(萬字圖文總結)

特點:

  • 實現AMQP(Advanced Message Queuing Protocol)標準。

  • 提供靈活的訊息路由和交換機模型,支援多種訊息模式。

  • 具有高可用性和可擴充套件性,支援叢集配置。

  • 提供事務和永續性,支援訊息確認機制。

架構:

RabbitMQ採用基於代理的架構,包括Exchange(交換機)、Queue(佇列)、Binding(繫結)等核心元件。

如下圖所示:

訊息佇列MQ最全詳解(萬字圖文總結)

應用:

適用於微服務通訊、任務佇列、實時通訊等各種場景。

3.Kafka
訊息佇列MQ最全詳解(萬字圖文總結)

特點:

  • 高吞吐量,適用於大規模資料流處理。

  • 永續性儲存,支援訊息的持久化。

  • 分散式設計,可擴充套件性強,支援水平擴充套件。

  • 提供多分割槽和多副本的特性。

架構:

Kafka採用分散式釋出-訂閱模型,包括Producer(生產者)、Broker(代理伺服器)、Consumer(消費者)等元件。

如下圖所示:

訊息佇列MQ最全詳解(萬字圖文總結)

應用:

在大資料領域和實時資料處理中得到廣泛應用,處理大規模資料流的場景。

效能:

具有極高的吞吐量,能夠每秒處理數百萬條訊息,適用於高頻率的資料流處理。

4.RocketMQ
訊息佇列MQ最全詳解(萬字圖文總結)

特點:

  • 阿里巴巴開發,支援分散式、高可用性和可伸縮性。

  • 提供順序訊息、事務訊息等高階特性。

  • 高度可定製化,支援分散式事務。

架構:

RocketMQ包括Namesrv(名稱服務)、Broker(代理伺服器)、Producer(生產者)、Consumer(消費者)等元件。

如下圖所示:

訊息佇列MQ最全詳解(萬字圖文總結)

效能:

能夠處理十萬級別的訊息傳遞,支援大規模分散式部署。

5.Pulsar

訊息佇列MQ最全詳解(萬字圖文總結)

特點:

  • 雲原生設計,支援分散式、多租戶和可伸縮。

  • 提供水平擴充套件,支援多資料中心部署。

  • 支援多種訊息傳遞模型和協議。

  • 提供強大的流式處理和事件驅動支援。

架構:

Pulsar的架構包括Broker(代理伺服器)、ZooKeeper等元件。

訊息佇列MQ最全詳解(萬字圖文總結)

應用:

適用於新一代的雲原生分散式訊息流平臺,特別適用於處理大規模資料流的場景。

MQ訊息佇列應用

訊息佇列MQ最全詳解(萬字圖文總結)

1.解耦性

傳送積分、發簡訊等任務,可以透過訊息佇列實現解耦,可以極大提升效能。

2.非同步通訊

在需要後臺處理的任務中,傳送方可以將任務資訊傳送到佇列,然後繼續執行其他操作,而不必等待任務的實時處理。

3.日誌

Kafka等訊息佇列系統常被用於日誌收集,實現大規模、實時的日誌處理和分析。

日誌場景,包含:日誌的集中儲存、分析和監控等等,Kafka就是典型的使用者。

4.削峰

訊息佇列可以平滑處理流量峰值,防止系統過載。

在大型購物活動,如阿里雙11期間,訊息佇列用於平滑處理大量的交易請求,確保系統的可伸縮性和穩定性。

來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70024924/viewspace-3008190/,如需轉載,請註明出處,否則將追究法律責任。

相關文章