微信公眾號(hào):馮文議(ID:fwy-world)
大家好馒胆!
今天跟大家一起探討一個(gè)場(chǎng)景:用戶對(duì)商品下單,約定30分鐘沒(méi)支付凝果,超時(shí)訂單將被系統(tǒng)自動(dòng)關(guān)閉祝迂。
你會(huì)如何實(shí)現(xiàn)呢?
早期方案:掃表
定時(shí)任務(wù)器净,每分鐘去查詢數(shù)據(jù)庫(kù)液兽,查詢超時(shí)沒(méi)有支付的,就修改訂單狀態(tài)掌动。
掃表實(shí)現(xiàn).jpg
思路清晰四啰,實(shí)現(xiàn)起來(lái)也比較簡(jiǎn)單,但是遇到的問(wèn)題也比較多粗恢,比如:
- 每分鐘都去查詢數(shù)據(jù)庫(kù)柑晒,數(shù)據(jù)庫(kù)的壓力比較大。
- 有一定的延遲眷射。
方案升級(jí):消息隊(duì)列
用戶下單成功匙赞,就發(fā)送到消息隊(duì)列。時(shí)間到了妖碉,消費(fèi)端拿到數(shù)據(jù)另锋,就查詢數(shù)據(jù)换况,判斷訂單狀態(tài),如果沒(méi)有支付,就修改訂單狀態(tài)赏殃。
消息隊(duì)列實(shí)現(xiàn).jpg
目前落地的是采用 RabbitMQ 的延遲隊(duì)列谤狡。用戶創(chuàng)建訂單成功,就加入到 MQ 的延遲隊(duì)列,時(shí)間到了匹中,就會(huì)自動(dòng)消費(fèi),然后關(guān)單豪诲。
關(guān)于 RabbitMQ 延遲隊(duì)列顶捷,可以看這篇文章:Spring Boot and RabbitMQ 初探 中關(guān)于【延遲隊(duì)列】部分!
好了屎篱,今天的分享就到這里了服赎。我是小馮,一名Java程序員交播,專注于程序設(shè)計(jì)和開(kāi)發(fā)重虑,如果你在開(kāi)發(fā)上遇到問(wèn)題,歡迎一起交流堪侯,微信公眾號(hào):馮文議(ID:fwy-world)。