首頁  >  文章  >  後端開發  >  搶購時,用非同步隊列處理下單,那怎麼實時把下單結果通知用戶呢?

搶購時,用非同步隊列處理下單,那怎麼實時把下單結果通知用戶呢?

WBOY
WBOY原創
2016-10-17 09:30:141895瀏覽

搶購時,用非同步隊列處理下單,那怎麼實時把下單結果通知用戶呢?

回覆內容:

搶購時,用非同步隊列處理下單,那怎麼實時把下單結果通知用戶呢?

client端用js輪詢一個接口,用來取得處理狀態

搶購最重要的是要確保庫存資料的強一致性,搶購的瞬時流量非常大,如果使用MySql等一些關係型資料庫可能會扛不住這方面的壓力。一般會結合快取中間件進行處理,例如redis。搶購開始前,將商品和庫存資料同步到redis中,所有的搶購作業都在redis中進行處理,後台開啟一個非同步任務,定時的將庫存資料刷到資料庫中。
跟著開始對訂單進行付款,由於流量較大,第三方支付系統本身也對呼叫端的應用限制流量,所以你這邊所說的應該是我接下來需要描述的。
這裡必然要使用訊息佇列(也就是你所說的非同步佇列),可以參考淘寶雙11的限流措施,為了保護系統不受高流量的衝擊而導致系統崩潰的問題,訊息佇列做了一層緩衝保護,系統需要設計一個視窗模型,視窗模型會即時的刷新用戶辦理手續的狀態。
例如,用戶下單之後準備去付款,這個時候會跳到辦事大廳的服務窗口,如果此時窗口都滿了,也就是消費者的數量達到上線了,那麼需要用戶開始排隊,系統可以透過彈出等待窗口,讓用戶等待一下,一旦有空閒的線程釋放出來,用戶就可以開始支付下單。
上面的是以拍下減庫存的模型進行說明,如果你們設計的系統是付款減庫存,稍微會有些出入,但是同樣也需要這樣的窗口需要告知用戶狀態,及時用戶付款成功,雖然沒及時把狀態返回給用戶,用戶能夠透過一個頁面及時查看到他的視窗狀態就可以了。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn