訊息佇列MQ最全詳解(萬字圖文總結)
來源:mikechen的網際網路架構
訊息佇列MQ是網際網路架構的基石,大量應用於類似:阿里雙11等併發場景,下面我就全面來詳解MQ訊息佇列
訊息佇列MQ
訊息佇列(Message Queue,簡稱MQ)是一種用於在軟體系統之間傳遞訊息的通訊方式。
如下圖所示:
訊息通常包含了:要傳遞的資訊,可以是文字、二進位制資料、JSON、XML等格式。
可以是任何形式的資訊,例如:訂單資訊、日誌記錄、事件等,都可以進行傳輸。
訊息佇列MQ如今在網際網路的應用非常廣泛,下面我會全面來詳解訊息佇列MQ@mikechen
訊息佇列MQ架構
一.整體架構
訊息佇列MQ的整體架構,如下圖所示:
主要會包含:生產者Producer、Broker、消費Consumer。
1.生產者Producer
生產者:是系統中負責建立,併傳送訊息到訊息佇列的元件。
生產者的主要責任包括:
建立訊息:構造訊息體並新增必要的後設資料,例如:訊息標識、時間戳等。
將訊息傳送到訊息佇列:將訊息傳送到指定的佇列或主題,將訊息傳遞給中介軟體。
2.訊息體
訊息體是訊息中的實際資料,它包含了:需要在生產者和消費者之間傳遞的資訊。
訊息體的內容可以是:文字、JSON、二進位制資料等,具體格式取決於應用的需求。
3.Broker
Broker中介軟體:負責接收、儲存和傳遞訊息。
如下圖所示:
Broker,充當了生產者和消費者之間的中介。
主要職責包括:
1)接收訊息
從生產者接收訊息,並將其儲存在訊息佇列中。
2)管理訊息
維護訊息佇列的後設資料,確保訊息按照規定的順序傳遞。
3)將訊息傳遞給消費者
將訊息傳遞給,訂閱了相關佇列或主題的消費者
總之,Broker是訊息佇列(Message Queue)中的一個重要元件,它充當了訊息的中間人,負責協調和管理訊息的傳遞。
4.消費者Consumer
消費者(Consumer)是訊息佇列系統中的一個重要元件,其主要責任是訂閱訊息佇列中的訊息,並進行處理。
以下是一些常見的訊息佇列中的消費方式:
1.Push模式
在Push模式中,訊息佇列主動將訊息推送給消費者。
一旦訊息佇列接收到訊息,它立即將訊息推送給已經訂閱了該佇列或主題的消費者, 這樣的方式使得消費者能夠即時地獲取訊息。
2.Pull模式
在Pull模式中,消費者主動從訊息佇列中拉取訊息。,消費者根據需要向訊息佇列請求訊息,然後進行處理。
3.批次拉取
一些訊息佇列系統支援批次拉取訊息,即消費者可以一次性獲取多個訊息。
4.定時拉取
消費者可以定時地按照一定的頻率拉取訊息,而不是實時處理,這種方式適用於一些場景,例如:需要按照固定間隔處理訊息的情況。
訊息佇列MQ型別
訊息佇列型別,主要會包含:點對點模型和訂閱-釋出模型。
1.點對點模型
點對點模型,是一對一關係,如下圖所示:
在點對點模型中,一條訊息只會被一個消費者消費, 即使有多個消費者訂閱了同一個佇列,每條訊息也只會被其中一個消費者接收。
適用於任務分發模式,每個任務只被一個消費者執行的場景,這種模型常見於一些任務分配、請求-響應等場景。
2.訂閱-釋出模型
訂閱-釋出模型,全稱是Publish-Subscribe Model,是訊息佇列中一種常見的訊息傳遞模型,也被稱為釋出訂閱模型。
如下圖所示:
特點:
一對多關係: 每條訊息可以被多個消費者接收。
主題(Topic): 訊息被髮布到一個主題,而訂閱者可以選擇訂閱特定的主題。
釋出者(Publisher): 生產者或釋出者,負責將訊息釋出到一個或多個主題。
訂閱者(Subscriber): 消費者或訂閱者,可以選擇訂閱一個或多個主題,以接收發布到這些主題的訊息。
流程:
釋出訊息: 釋出者將訊息釋出到一個特定的主題,如"新聞"或"實時通知"。
訂閱主題: 訂閱者,選擇訂閱感興趣的主題,比如:訂閱"新聞"主題。
訊息傳遞: 當釋出者釋出與訂閱者已訂閱的主題相關的訊息時,訂閱者將接收到這些訊息。
應用場景:
實時廣播: 適用於需要將訊息廣播給多個消費者的場景,例如:實時通知、廣播訊息等。
事件驅動: 用於實現事件驅動架構。
分散式系統整合: 在分散式系統中,釋出-訂閱模型可以用於實現元件之間的松耦合通訊,提高系統的靈活性和可擴充套件性。
3.點對點和釋出訂閱的區別
點對點模型適用於一對一的場景,關注直接連線的點對點關係,而釋出訂閱模型適用於一對多的場景。
點對點模型
著重於訊息的直接傳遞,訊息的生產者和消費者之間直接連線。
這種模型通常強調點對點的關係,訊息的生產者和消費者之間是一對一的。
釋出訂閱模型
著重於訊息的廣播和分發,訊息的釋出者和訂閱者之間透過主題進行間接連線。
這種模型通常強調一對多的關係,一個訊息可以被多個訂閱者接收。
5大常用訊息佇列MQ
1.ActiveMQ
特點:
支援JMS規範,實現了Java語言的訊息中介軟體。
提供點對點(P2P)和釋出-訂閱(Pub/Sub)兩種訊息傳遞模型。
提供高階特性,如事務、永續性、訊息過濾、訊息導向等。
多語言支援,適用於Java、C++, .NET等。
應用:
適用於Java環境下的分散式系統,企業級應用中的訊息傳遞和非同步通訊。
效能:
效能在萬級/秒。
2.RabbitMQ
特點:
實現AMQP(Advanced Message Queuing Protocol)標準。
提供靈活的訊息路由和交換機模型,支援多種訊息模式。
具有高可用性和可擴充套件性,支援叢集配置。
提供事務和永續性,支援訊息確認機制。
架構:
RabbitMQ採用基於代理的架構,包括Exchange(交換機)、Queue(佇列)、Binding(繫結)等核心元件。
如下圖所示:
應用:
適用於微服務通訊、任務佇列、實時通訊等各種場景。
3.Kafka
特點:
高吞吐量,適用於大規模資料流處理。
永續性儲存,支援訊息的持久化。
分散式設計,可擴充套件性強,支援水平擴充套件。
提供多分割槽和多副本的特性。
架構:
Kafka採用分散式釋出-訂閱模型,包括Producer(生產者)、Broker(代理伺服器)、Consumer(消費者)等元件。
如下圖所示:
應用:
在大資料領域和實時資料處理中得到廣泛應用,處理大規模資料流的場景。
效能:
具有極高的吞吐量,能夠每秒處理數百萬條訊息,適用於高頻率的資料流處理。
4.RocketMQ
特點:
阿里巴巴開發,支援分散式、高可用性和可伸縮性。
提供順序訊息、事務訊息等高階特性。
高度可定製化,支援分散式事務。
架構:
RocketMQ包括Namesrv(名稱服務)、Broker(代理伺服器)、Producer(生產者)、Consumer(消費者)等元件。
如下圖所示:
效能:
能夠處理十萬級別的訊息傳遞,支援大規模分散式部署。
5.Pulsar
特點:
雲原生設計,支援分散式、多租戶和可伸縮。
提供水平擴充套件,支援多資料中心部署。
支援多種訊息傳遞模型和協議。
提供強大的流式處理和事件驅動支援。
架構:
Pulsar的架構包括Broker(代理伺服器)、ZooKeeper等元件。
應用:
適用於新一代的雲原生分散式訊息流平臺,特別適用於處理大規模資料流的場景。
MQ訊息佇列應用
1.解耦性
傳送積分、發簡訊等任務,可以透過訊息佇列實現解耦,可以極大提升效能。
2.非同步通訊
在需要後臺處理的任務中,傳送方可以將任務資訊傳送到佇列,然後繼續執行其他操作,而不必等待任務的實時處理。
3.日誌
Kafka等訊息佇列系統常被用於日誌收集,實現大規模、實時的日誌處理和分析。
日誌場景,包含:日誌的集中儲存、分析和監控等等,Kafka就是典型的使用者。
4.削峰
訊息佇列可以平滑處理流量峰值,防止系統過載。
在大型購物活動,如阿里雙11期間,訊息佇列用於平滑處理大量的交易請求,確保系統的可伸縮性和穩定性。
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70024924/viewspace-3008190/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 訊息佇列mq總結佇列MQ
- 訊息佇列(MQ)佇列MQ
- MQ訊息佇列_RabbitMQMQ佇列
- MQ 訊息佇列 比較MQ佇列
- 訊息佇列MQ核心原理全面總結(11大必會原理)佇列MQ
- 詳解RPC遠端呼叫和訊息佇列MQ的區別RPC佇列MQ
- 主流的訊息佇列MQ比較,詳解MQ的4類應用場景佇列MQ
- ZooKeeper最全詳解(萬字圖文總結)
- 微服務最全詳解(圖文全面總結)微服務
- Redis系列:使用Stream實現訊息佇列 (圖文總結+Go案例)Redis佇列Go
- Spring Boot:使用Rabbit MQ訊息佇列Spring BootMQ佇列
- 手擼MQ訊息佇列——迴圈陣列MQ佇列陣列
- 負載均衡最全詳解(圖文全面總結)負載
- 訊息佇列Kafka學習總結佇列Kafka
- 如何實現MQ佇列訊息監控MQ佇列
- RocketMQ訊息中介軟體詳解(萬字圖文總結)MQ
- 訊息佇列ActiveMQ的使用詳解佇列MQ
- 分散式儲存最全詳解(圖文全面總結)分散式
- 高併發架構最全詳解(圖文全面總結)架構
- SSO單點登入最全詳解(圖文全面總結)
- DDD領域驅動最全詳解(圖文全面總結)
- MQ 訊息佇列的解耦、介面非同步處理、削峰MQ佇列解耦非同步
- Java訊息佇列總結只需一篇解決ActiveMQ、RabbitMQ、ZJava佇列MQ
- Java訊息佇列三道面試題詳解!Java佇列面試題
- 訊息佇列學習腦圖佇列
- 訊息佇列系列一:訊息佇列應用佇列
- 訊息佇列MQ應用場景及主流框架對比佇列MQ框架
- Redis使用ZSET實現訊息佇列使用總結一Redis佇列
- Redis使用ZSET實現訊息佇列使用總結二Redis佇列
- 訊息佇列佇列
- Java訊息佇列總結只需一篇解決ActiveMQ、RabbitMQ、ZeroMQ、KafkaJava佇列MQKafka
- 訊息佇列全面瞭解(一)佇列
- 譯文|如何將 Pulsar 用作訊息佇列佇列
- 消費端如何保證訊息佇列MQ的有序消費佇列MQ
- MQ系列8:資料儲存,訊息佇列的高可用保障MQ佇列
- 該如何進行架構設計一個MQ訊息佇列?架構MQ佇列
- Java訊息佇列入門詳解Java佇列
- RabbitMQ 訊息佇列之佇列模型MQ佇列模型