讀碼農翻身之消息隊列

1、爲什麼需要消息隊列?
假如有一個購物系統,邏輯上分爲訂單系統和庫存系統,訂單來了以後,先在訂單系統中存下來,然後通知庫存系統發貨。
此時這個購物系統是部署在一臺服務器上的。
在這裏插入圖片描述
但是當用戶量越來越多的時候,服務器慢慢的快扛不住了。慢慢的進行了拆分的操作,即訂單系統和庫存系統,分別在兩臺服務器上進行保存,也就是現在訂單系統如果要通知庫存系統,那麼就需要從原來的java方法調用,換成了http調用。
在這裏插入圖片描述
那麼這個時候又可能出現問題,因爲現在有http請求,那麼就意味着http請求有可能是不通的,那麼如果失敗後,訂單系統只能重試,這樣用戶提交一個訂單有可能會耗時較長,用戶體驗就下降了。
而消息隊列就是爲了解決該問題而出現的。

2、異步通信(消息隊列)
訂單系統產生的訂單,只需要將訂單寫入到這個隊列裏面去。然後庫存系統,從消息隊列中獲取消息,然後處理就可以了。
在這裏插入圖片描述

個人的疑問:
消息隊列的原理很簡單,只是如果深入的話,我感覺還有幾個點需要考慮:
1、消息隊列的可靠性。不能只有一臺,否則一臺掛掉以後,系統也就崩潰了
2、消息隊列需要支持重發,同時接受方需要做冪等性。
3、如上這種訂單系統和庫存系統,萬一出現庫存沒有了?而用戶下訂單已經成功了,那麼此時又該怎麼處理?
這種情況,要不從業務方面上解決?比如訂單有狀態,只有庫存系統處理完了,這個訂單纔是真正的完成?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章