訊息佇列本質上就是乙個中轉站,如下圖,生產者將訊息傳送到乙個叫訊息佇列的容器中,然後消費者從容器中去取自己需要的訊息。有沒有覺得和分布式系統的註冊中心有點像啊。
這就是最原始最簡單的訊息佇列——佇列模型,允許多個生產者往同乙個佇列中傳送訊息,但同一時刻只能有乙個消費者獲取訊息,消費完後訊息被刪除。
由於佇列模型中的訊息只能被乙個消費者消費,若多個消費之都想要消費同乙個訊息,則佇列模型無法滿足需求,因此就在佇列模型的基礎上衍生出了發布-訂閱模型,這也成為現在主流的訊息佇列模型。
在發布-訂閱模型中,存放訊息的容器變為了主題,訂閱者在接受訊息前需要先訂閱主題,然後就可以獲取訂閱主題的所有訊息。
發布-訂閱模型也遵循訊息佇列的三要素:生產者、消費者(訂閱者)和容器(主題),唯一的不同點在於:乙份訊息可以被多次消費。
三個最主要的應用場景:解耦、非同步、削峰
1. 解耦
就下面這個訂單系統,客戶支付成功後,還需要計算優惠、計算積分、傳送簡訊等操作,如果沒有訊息佇列,則需要這些操作都完成才能返回結果。
引入訊息佇列後,支付系統完成後,傳送乙個支付成功的訊息到佇列,然後支付返回結果,其它系統如計算積分系統直接訂閱佇列中的支付成功訊息,然後進行積分的計算就可以了。從而實現解耦,大大縮短系統響應時間。
2. 非同步
兩個系統a和b,系統b需要使用系統a中步驟一的結果才能執行
若不適用訊息佇列,則必須等系統a全部執行完畢,系統b才能拿到需要的值然後執行,這樣就導致系統b明明只需要系統a步驟一的結果,卻要等到系統a全部執行完才能執行,原本不那麼相關的東西但是得序列執行。
引入訊息佇列後,如下所示,系統a的步驟一執行完畢後,就可以將系統b需要的值傳送給訊息佇列,然後繼續往下執行,而此時系統b可以從訊息佇列中拿到需要的值,也能同步開始執行,從而實現非同步。
3. 削峰
就拿雙十一來說吧,10億人買東西,去請求資料庫,併發量巨大,會導致資料庫異常,而有了訊息佇列後,可以把這些請求存放到佇列中,每次取系統的最大安全併發量的訊息取運算元據,完成削峰的目的,如下圖:
系統可用性降低
因為引入了訊息佇列,就相當於引入了乙個元件,若這個元件掛了,則整個系統也就掛了。因此,系統可用性降低
系統複雜性增加
如一致性問題、如何保證訊息不被重複消費,如何保證保證訊息可靠傳輸。因此,需要考慮的東西更多,系統複雜性增大。
中介軟體 訊息佇列
參考 訊息佇列的四種應用場景 訊息佇列設計思路 1 非同步處理 使用者註冊時,可以同時將 傳送郵件 和 傳送簡訊 功能放到訊息佇列中實現。可以提高使用者響應時間,提高系統吞吐量。2 應用解耦 使用者下單和庫存扣賬中使用訊息,可以防止庫存系統出問題後,導致使用者下單失敗。3 流量削峰 秒殺活動中,由於...
訊息中介軟體 訊息匯流排 訊息佇列
一 總論 訊息中介軟體的三大作用 系統解耦 非同步處理 流量削峰。1 非同步處理 解決序列和單純並行,但是這樣做也有弊端,比如註冊實際是失敗了,但是已經顯示註冊完成!2 系統解耦 寫死介面導致的問題不用多說吧,並且導致分布式系統無法解決高併發 不準確 3 流量消峰 也稱限流,在秒殺等業務中為防止流量...
訊息中介軟體
1.訊息的優先順序 2.訊息排序 3.訊息過濾 4.訊息持久化 5.訊息重試 6.事務的支援 7.broker滿 生產者,佇列,消費者 訊息佇列的優點 1 解耦2 非同步訊息,系統響應 在jms中,有兩種訊息模型 點對點模式和發布訂閱模式。1.在點對點模式中 有三種角色 1 訊息佇列,傳送者,接受者...