訊息佇列中介軟體是分布式系統中重要的元件,主要解決應用耦合,非同步訊息,流量削峰等問題。
實現高效能,高可用,可伸縮和最終一致性的架構。是大型分布式系統不可缺少的中介軟體。
使用場景
非同步處理:
場景說明:使用者註冊成功後,傳送註冊郵件,再傳送註冊簡訊。
序列方式:將註冊資訊寫入資料庫成功後,向使用者傳送郵件,再傳送註冊簡訊,將結果返回客戶端
並行方式:將註冊資訊寫入資料庫成功後,傳送註冊郵件的同時,傳送註冊簡訊,以上三個任務完成後,返回給客戶端。
訊息佇列:將註冊資訊寫入資料庫成功後,註冊資訊寫入訊息佇列,傳送郵件和簡訊的消費者非同步讀取訊息佇列,寫入訊息佇列即將結果返回給客戶端。
應用解耦
場景說明:使用者下單後,訂單系統需要通知庫存系統。
傳統方式:訂單系統呼叫庫存系統的介面
訊息佇列:
訂單系統:使用者下單後,訂單系統完成持久化處理,將訊息寫入訊息佇列,返回使用者訂單下單成功。
庫存系統:
訂閱下單的訊息,採用拉/推的方式,獲取下單資訊,庫存系統根據下單資訊,進行庫存的操作。
流量削峰
場景說明:秒殺活動,一般會因為流量過大,導致流量暴增。
傳統方式:服務端突然接受到來自前端的大量訂單請求
訊息佇列:在應用前端加入訊息佇列
1、使用者的請求,伺服器接受後,首先寫入訊息佇列。加入訊息佇列長度超過對打數量,則直接拋棄使用者請求或跳轉到錯誤頁面。
2、秒殺業務根據訊息佇列中的請求資訊,再做後續處理。
訊息佇列處理高併發
用mq來將耗時比較長或者耗費資源的請求排隊,非同步處理,減輕伺服器壓力增加穩定性。如果是高併發的實時請求,我個人覺得不適用這個方案。如果是為了高併發,我覺得應該朝解決高併發的方向考慮。集群 分布式 動靜分離 資料庫讀寫分離之類的。web的話,只能客戶端頁面輪訓處理結果。因為,據我個人了解啊,現在we...
高併發之訊息佇列
比如乙個介面處理簡訊傳送,如果沒處理完就可以放入訊息佇列 然後等待介面處理,如果介面處理簡訊傳送失敗則可以再次放入訊息佇列,減少嘗試的次數和占用的執行緒,再次進行處理。舉幾個例子 業務系統觸發簡訊傳送申請,但簡訊傳送模組速度跟不上,需要將來不及處理的訊息暫存一下,緩衝壓力。就可以把簡訊傳送申請丟到訊...
VC開發 訊息傳遞
在windows下,傳遞訊息一般使用兩個函式postmessage和sendmessage,函式原型如下 bool winapi postmessage hwnd hwnd,uint msg,wparam wparam,lparam lparam bool winapi sendmessage hw...