1-為什麼需要訊息佇列

LZC發表於2021-07-07

非同步處理:假設某個介面有ABC三個操作,A操作很快就能完成,但是BC操作比較耗時,此時就可以把BC兩個操作放入到訊息佇列中,並直接返回,這樣就能減少介面的等待時間。

流量控制:假設我們的資料庫系統每秒只能處理 2k 個請求,系統正常情況下,每秒併發請求數量就 50 個。 系統高峰期時,每秒需要處理 5k 個請求,如果這 5k 個請求直接訪問到資料庫,那麼資料庫肯定是扛不住的。 如果使用 MQ,每秒 5k 個請求寫入到 MQ,然後系統透過 MQ 慢慢拉取請求,每秒鐘拉取 2k 個請求。 在高峰期時,會有大量的請求積壓在了 MQ 中,但是高峰期過了之後,每秒就 50 個請求進入到 MQ,而系統每秒鐘從 MQ 中拉取 2k 個請求,系統就能夠快速的消費掉積壓的訊息。

服務解耦:以保險公司為例,A系統中的案件結案後:

  • B系統需要將案件的賠付資訊上傳到監管平臺

  • C系統需要對這個案件進行風險分析,需要識別出這個案件是否騙保或者是需要追償的案件

傳統做法就是:A系統分別去呼叫B、C系統的介面,假設此時又有D、E、F系統也需要知道案件是否結案,那麼A系統也要修改程式碼。
引入訊息佇列後,A系統的案件結案後直接往訊息佇列中傳送一條結案訊息,所有的下游系統只要訂閱這個訊息就可以了,無論是增加或者減少下游系統,A系統都無需修改程式碼。

資料分發

訊息佇列也有它自身的一些問題和侷限性,包括:

引入訊息佇列帶來的延遲問題;

增加了系統的複雜度;

可能產生資料不一致的問題。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章