MQ入門概述

什麼是MQ?

MQ全稱爲Message Queue,即消息隊列面向消息的中間件。生產者往消息隊列中寫消息,消費可以讀取隊列中的消息。

是指利用高效可靠的消息傳遞機制與平臺無關的數據交流,並基於數據通信來進行分佈式系統的集成。通過提供消息傳遞和消息排隊模型在分佈式環境下提供應用解耦,彈性伸縮,冗餘存儲、流量削峯,異步通信,數據同步等功能。
大致的過程是這樣的:發送者把消息發送給消息服務器,消息服務器將消息存放在若干隊列/主題topic中,在合適的時候,消息服務器回將消息轉發給接受者。在這個過程中,發送和接收是異步的,也就是發送無需等待,而且發送者和接受者的生命週期也沒有必然的關係;尤其在發佈pub/訂閱sub模式下,也可以完成一對多的通信,即讓一個消息有多個接受者。
在這裏插入圖片描述

MQ主要作用

  1. 異步:調用者無需等待,異步進行處理;
  2. 解耦:解決了系統之間耦合調用的問題;
  3. 消峯:抵禦洪峯流量,保護了主業務;

MQ的優缺點

優點:

  1. 採用異步處理模式:消息發送者可以發送一個消息而無須等待響應。消息發送者將消息發送到一條虛擬的通道(主題或者隊列)上;消息接收者則訂閱或者監聽該愛通道。一條消息可能最終轉發給一個或者多個消息接收者,這些消息接收者都無需對消息發送者做出同步迴應。整個過程都是異步的;

  2. 應用系統之間解耦合發送者和接受者不必瞭解對方,只需要確認消息。發送者和接收者不必同時在線。

  3. 可對高流量進行削峯,保證系統的平穩運行。

缺點:

  1. 系統可用性降低,一般而言,引入的外部依賴越多,系統越脆弱,每一個依賴出問題都會導致整個業務鏈路出現問題;
  2. 系統複雜度提高,要考慮各種情況,例如消息的冪等性、消息的丟失、消費順序等;
  3. 分佈式事物,數據一致性問題;

各類MQ對比

MQ只是一種理念,天上飛的理念,必然有落地的實現。不管是哪款消息中間件,都有如下一些技術維度:

技術維度 ActiveMQ RocketMQ RabbitMQ Kafka
PRODUCER-CUMSUMER 支持 支持 支持 支持
PUBLISH-SUBSCRIBE 支持 支持 支持 支持
REQUEST-REPLY 支持 支持 支持 *
API完整性 (靜態配置)
文檔完整性
多語言支持 支持,Java優先 支持 語言無關 支持,Java優先
單機吞吐量 萬級 萬級 萬級 十萬級
消息延遲 * * 微秒級 毫秒級
可用性 高(主從) 高(主從) 非常高(分佈式
消息丟失 * * 理論上不會丟失
消息重複 * * 可控 理論上會有重複
快速入門
首次部署難度 *
編程語言 Java Java erlang scala
應用領域 中小型項目 大型項目,集羣 中大型項目 大數據
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章