十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
大家好,我是老三,大家對電商購物應(yīng)該都比較熟悉了,我們應(yīng)該注意到,在下單之后,通常會(huì)有一個(gè)倒計(jì)時(shí),如果超過支付時(shí)間,訂單就會(huì)被自動(dòng)取消。

按需定制可以根據(jù)自己的需求進(jìn)行定制,網(wǎng)站制作、網(wǎng)站建設(shè)構(gòu)思過程中功能建設(shè)理應(yīng)排到主要部位公司網(wǎng)站制作、網(wǎng)站建設(shè)的運(yùn)用實(shí)際效果公司網(wǎng)站制作網(wǎng)站建立與制做的實(shí)際意義
下單
今天,我們來聊聊訂單超時(shí)未支付自動(dòng)取消的幾種方案。
這是最容易想到的辦法,定時(shí)任務(wù)去輪詢數(shù)據(jù)庫,取消即將超時(shí)的訂單。
訂單輪詢
定時(shí)任務(wù)實(shí)現(xiàn)方式有很多種,大概可以分為兩類:本地定時(shí)任務(wù)和分布式定時(shí)任務(wù)。
定時(shí)任務(wù)實(shí)現(xiàn)
本地定時(shí)任務(wù),適用于單機(jī)版的業(yè)務(wù)系統(tǒng),實(shí)現(xiàn)方式非常多樣:
分布式定時(shí)任務(wù):適用于分布式的業(yè)務(wù)系統(tǒng),主要的實(shí)現(xiàn)框架有兩種:
定時(shí)任務(wù)實(shí)現(xiàn)的優(yōu)點(diǎn)是開發(fā)起來比較簡單,但是它也有一些缺點(diǎn):
在文章開頭的那個(gè)倒計(jì)時(shí)器,大家覺得是怎么做的呢?一般是客戶端計(jì)時(shí)+服務(wù)端檢查。
什么意思呢?就是這個(gè)倒計(jì)時(shí)由客戶端去做,但是客戶端定時(shí)去服務(wù)端檢查,修正倒計(jì)時(shí)的時(shí)間。
那么,這個(gè)訂單超時(shí)自動(dòng)取消,也可以由客戶端去做:
被動(dòng)取消
這種方式實(shí)現(xiàn)起來也比較簡單,但是它也有缺點(diǎn):
依賴客戶端,如果客戶端不發(fā)起請求,訂單可能永遠(yuǎn)沒法過期,一直占用庫存
當(dāng)然,也可以被動(dòng)取消+定時(shí)任務(wù),通過定時(shí)任務(wù)去做兜底的操作。
第三種方案,就是利用延時(shí)消息了,可以使用RocketMQ、RabbitMQ、Kafka的延時(shí)消息,消息發(fā)送后,有一定延時(shí)才會(huì)投遞。
延時(shí)消息
我們用的就是這種,消息隊(duì)列采用的是RocketMQ,其實(shí)RocketMQ延時(shí)也是利用定時(shí)任務(wù)實(shí)現(xiàn)的。
使用延時(shí)消息的優(yōu)點(diǎn)是比較高效、好擴(kuò)展,缺點(diǎn)是引入了新的技術(shù)組件,增加了復(fù)雜度。
除了上面的三種,其實(shí)還有一些其它的方式,例如本地延遲隊(duì)列、時(shí)間輪算法、Redis過期監(jiān)聽……
但是我覺得,應(yīng)該不會(huì)有人真考慮過在生產(chǎn)上使用這些方法。
這里再給大家提個(gè)小問題,假如我們接入了一種支付方式,支付的周期非常長,我們需要延長訂單的有效時(shí)間,這種情況下,大家會(huì)怎么實(shí)現(xiàn)訂單超時(shí)未支付自動(dòng)取消呢?
[1].Java中定時(shí)任務(wù)的6種實(shí)現(xiàn)方式,你知道幾種?:https://juejin.cn/post/6992719702032121864
[2].訂單超時(shí)未支付自動(dòng)取消8種實(shí)現(xiàn)方案:https://blog.csdn.net/Anenan/article/details/126368753:?