消息中間件在后臺系統中是必不可少的一個組件,一般我們會在以下場景中使用消息中間件:
* 異步處理:異步處理是使用消息中間件的一個主要原因,在工作中最常見的異步場景有用戶注冊成功后需要發送注冊成功郵件、緩存過期時先返回老的數據,然后異步更新緩存、異步寫日志等等;通過異步處理,可以減少主流程的等待響應時間,讓非主流程或者非重要業務通過消息中間件做集中的異步處理。
* 系統解耦:比如在電商系統中,當用戶成功支付完成訂單后,需要將支付結果給通知ERP系統、發票系統、WMS、推薦系統、搜索系統、風控系統等進行業務處理;這些業務處理不需要實時處理、不需要強一致,只需要最終一致性即可,因此可以通過消息中間件進行系統解耦。通過這種系統解耦還可以應對未來不明確的系統需求。
* 削峰填谷:當系統遇到大流量時,監控圖上會看到一個一個的山峰樣的流量圖,通過使用消息中間件將大流量的請求放入隊列,通過消費者程序將隊列中的處理請求慢慢消化,達到消峰填谷的效果。最典型的場景是秒殺系統,在電商的秒殺系統中下單服務往往會是系統的瓶頸,因為下單需要對庫存等做數據庫操作,需要保證強一致性,此時使用消息中間件進行下單排隊和流控,讓下單服務慢慢把隊列中的單處理完,保護下單服務,以達到削峰填谷的作用。
業界消息中間件是一個非常通用的東西,大家在做選型時有使用開源的,也有自己造輪子的,甚至有直接用 MySQL 或 Redis 做隊列的,關鍵看是否滿足你的需求,如果是使用開源的項目,以下的表格在選型時可以參考:

\[圖3\]
以上圖的緯度為:名字 成熟度 所屬社區/公司 文檔 授權方式 開發語言 支持的協議 客戶端支持的語言 性能 持久化 事務 集群 負載均衡 管理界面 部署方式 評價