消息中間件MQ概述
1、什麼是消息中間件?
消息中間件是分佈式系統中的一個子系統,關注於數據的發送和接收,利用高效可靠的異步消息傳遞機制對分佈式系統中的其餘各個子系統進行集成。通過提供消息傳遞和消息排隊模型,可以在分佈式架構下擴展進程間的通信。
2、消息中間件能做什麼?
消息中間件主要解決的是分佈式系統之間消息傳遞的問題,能夠屏蔽各種平臺以及協議之間的特性,實現應用程序之間的協同。
2.1異步處理
一個註冊流程如下所示:如果每個過程都花費1s時間,則整個過程需要4s,其實後面的三個流程之間是弱依賴的,這三個流程並沒有先後關係,因此可以將串行改爲並行,提升整體性能。因此很順利的想到多線程的概念,但多線程不能方便的解決消息持久化,消息的重傳等問題,因此引入消息中間件來處理這個問題。
引入消息中間件後的流程圖:
2.2 應用解耦
場景說明:訂單服務結束後,需要調用庫存服務,如果庫存服務因爲網絡原因無法訪問,因此訂單服務也必須回滾。
引入消息中間件後:
訂單系統:用戶下單後,訂單系統完成持久化處理,將消息寫入消息隊列,返回用戶訂單下單成功。無需關心後續的業務。
庫存系統:訂閱下單的消息,採用拉/推的方式,獲取下單信息,庫存系統根據下單信息,進行庫存操作。
2.3 流量削峯
場景說明:秒殺系統,一般因爲流量過大,流量暴增,導致應用掛掉,一般採用消息隊列控制活動人數,緩解短時間內高流量壓垮應用。
請求到來時,放入消息隊列中,若消息隊列容量已經達到指定容量,則該請求不予處理,之間返回商品已經出售完畢之類的信息,然後秒殺服務通過推/拉的方式從隊列中取出請求,進行處理。
3、消息中間件發展史
4、常用消息中間件的比較
5、JMS規範
JMS(Java Messaging Service)是Java平臺上有關面向消息中間件的技術規範,實際上是一套api,類似於JDBC。它便於消息系統中的Java應用程序進行消息交換,並且通過提供標準的產生、發送、接收消息的接口簡化企業應用的開發,ActiveMQ而是這個規範的一個具體實現。