也許在大家公司從沒有使用過MQ,也不知道這東西是用來幹什麼的,可是一旦你進入大公司你就會發現,這東西到處可見。今天就來講說MQ方面的東西,我公衆號有
activemq
的 demo,你們能夠本身去看看。
MQ
Message Queue
簡稱MQ
,中文消息隊列。前端
你能夠把它理解爲一箇中間件,幫你完成多個系統或應用間的消息傳遞。java
MQ
首先它有3個核心,解耦
,異步
,削峯
,所以咱們能夠想到如下使用場景:git
如今想一想你爲何沒有使用到mq吧?或是考略使用mqgithub
任何事物都有它的兩面性,既然有優勢那也有缺點:數據庫
萬一mq掛了,隊列裏面的數據沒有了,其它系統數據還沒處理完,這可咋整?瀏覽器
你用個mq是爽了,其它系統也要對應的修改本身的系統,來消費隊列中的消息。硬生生加個 MQ 進來,你怎麼保證消息沒有重複消費?怎麼處理消息丟失的狀況?怎麼保證消息傳遞的順序性?頭大頭大,問題一大堆,痛苦不已。架構
你訂單系統操做成功了,可是庫存系統卻失敗了,這樣致使了數據的不一致。併發
因此消息隊列實際是一種很是複雜的架構,你引入它有不少好處,可是也得針對它帶來的壞處作各類額外的技術方案和架構來規避掉,作好以後,你會發現,媽呀,系統複雜度提高了一個數量級,也許是複雜了 10 倍。可是關鍵時刻,用,仍是得用的。異步
特性 | ActiveMQ | RabbitMQ | RocketMQ | Kafka |
---|---|---|---|---|
單機吞吐量 | 萬級,比 RocketMQ、Kafka 低一個數量級 | 同 ActiveMQ | 10 萬級,支撐高吞吐 | 10 萬級,高吞吐,通常配合大數據類的系統來進行實時數據計算、日誌採集等場景 |
topic 數量對吞吐量的影響 | topic 能夠達到幾百/幾千的級別,吞吐量會有較小幅度的降低,這是 RocketMQ 的一大優點,在同等機器下,能夠支撐大量的 topic | topic 從幾十到幾百個時候,吞吐量會大幅度降低,在同等機器下,Kafka 儘可能保證 topic 數量不要過多,若是要支撐大規模的 topic,須要增長更多的機器資源 | ||
時效性 | ms 級 | 微秒級,這是 RabbitMQ 的一大特色,延遲最低 | ms 級 | 延遲在 ms 級之內 |
可用性 | 高,基於主從架構實現高可用 | 同 ActiveMQ | 很是高,分佈式架構 | 很是高,分佈式,一個數據多個副本,少數機器宕機,不會丟失數據,不會致使不可用 |
消息可靠性 | 有較低的機率丟失數據 | 基本不丟 | 通過參數優化配置,能夠作到 0 丟失 | 同 RocketMQ |
功能支持 | MQ 領域的功能極其完備 | 基於 erlang 開發,併發能力很強,性能極好,延時很低 | MQ 功能較爲完善,仍是分佈式的,擴展性好 | 功能較爲簡單,主要支持簡單的 MQ 功能,在大數據領域的實時計算以及日誌採集被大規模使用 |
上面表格來自:https://github.com/doocs/adva...分佈式