消息是在兩台計算機間傳送的資料機關。消息可以非常簡單,例如隻包含文本字元串;也可以更複雜,可能包含嵌入對象。消息被發送到隊列中。消息隊列(Message Queue, MQ)是在消息的傳輸過程中儲存消息的容器。消息隊列管理器在将消息從它的源中繼到它的目标時充當中間人。隊列的主要目的是提供路由并保證消息的傳遞;如果發送消息時接收者不可用,消息隊列會保留消息,直到可以成功地傳遞它。消息隊列(Message Queue)是一種應用間的通信方式,消息發送後可以立即傳回,由消息系統來確定消息的可靠傳遞。消息釋出者隻管把消息釋出到 MQ 中而不用管誰來取,消息使用者隻管從 MQ 中取消息而不管是誰釋出的。這樣釋出者和使用者都不用知道對方的存在。
消息隊列是一種異步的服務間通信方式,使用無服務和微服務架構。消息在被處理和删除之前一直存儲在隊列上。每條消息僅可被同一使用者處理一次。消息隊列可被用于分離重量級處理、緩存或批處理工作以及緩解高峰期工作負載。在現代雲架構中,應用程式被分解為多個規模較小且更易于開發、部署和維護的獨立構模組化塊。消息隊列可為這些分布式應用程式提供通信和協調。消息隊列可以顯著簡化分離應用程式的編碼,同時提高性能、可靠性和可擴充性。
借助消息隊列,系統的不同部分可互相通信并異步執行處理操作。消息隊列提供一個臨時存儲消息的輕量級緩存區,以及允許軟體元件連接配接到隊列以及發送接受消息的終端節點。這些消息通常較小,可以是請求、恢複、錯誤消息或明文消息等。要發送消息時,一個名為“建立器”的元件将消息添加到隊列。消息将存儲在隊列中,直至名為“處理器”的另一元件檢索該消息并執行相關操作。許多建立器和處理器都可以使用隊列,但一條資訊隻能有一個處理器處理一次。是以,這種消息收發模式通常稱為一對一或點對點通信。如果消息需要由多個處理器進行處理,可采用扇出設計模式将消息隊列與釋出/訂閱消息收發結合起來。
我們可以把消息隊列比作是一個存放消息的容器,當我們需要使用消息的時候可以取出消息供自己使用。消息隊列是分布式系統中重要的元件,使用消息隊列主要是為了通過異步處理提高系統性能和削峰、降低系統耦合性。目前使用較多的消息隊列有ActiveMQ、RabbitMQ、ZeroMQ、Kafka、MetaMQ、RocketMQ而部分資料庫如Redis、Mysql以及phxsql也可實作消息隊列的功能。使用消息隊列主要有兩點好處:1.通過異步處理提高系統性能(削峰、減少響應所需時間);2.降低系統耦合性。
消息隊列使用場景
消息隊列在實際應用中包括如下四個場景:
- 應用耦合:多應用間通過消息隊列對同一消息進行處理,避免調用接口失敗導緻整個過程失敗;
- 異步處理:多應用對消息隊列中同一消息進行處理,應用間并發處理消息,相比串行處理,減少處理時間;
- 限流削峰:廣泛應用于秒殺或搶購活動中,避免流量過大導緻應用系統挂掉的情況;
- 消息驅動的系統:系統分為消息隊列、消息生産者、消息消費者,生産者負責産生消息,消費者(可能有多個)負責對消息進行處理;
資料來源:
消息隊列系列一(相關概念)
https://segmentfault.com/a/1190000018220881MQ消息中間件最全面分析
https://mp.weixin.qq.com/s/lqFGnIUtqTFZ_GHp46z48Q新手也能看懂,消息隊列其實很簡單
https://www.jianshu.com/p/36a7775b04ec