訂單支付超時,自動關(guān)閉訂單實現(xiàn)

> 微信公眾號:馮文議(ID:fwy-world)
大家好!
今天跟大家一起探討一個場景:用戶對商品下單,約定30分鐘沒支付,超時訂單將被系統(tǒng)自動關(guān)閉。
你會如何實現(xiàn)呢?
## 早期方案:掃表
定時任務,每分鐘去查詢數(shù)據(jù)庫,查詢超時沒有支付的,就修改訂單狀態(tài)。

思路清晰,實現(xiàn)起來也比較簡單,但是遇到的問題也比較多,比如:
1. 每分鐘都去查詢數(shù)據(jù)庫,數(shù)據(jù)庫的壓力比較大。
2. 有一定的延遲。
## 方案升級:消息隊列
用戶下單成功,就發(fā)送到消息隊列。時間到了,消費端拿到數(shù)據(jù),就查詢數(shù)據(jù),判斷訂單狀態(tài),如果沒有支付,就修改訂單狀態(tài)。

目前落地的是采用 RabbitMQ 的延遲隊列。用戶創(chuàng)建訂單成功,就加入到 MQ 的延遲隊列,時間到了,就會自動消費,然后關(guān)單。
關(guān)于 RabbitMQ 延遲隊列,可以看這篇文章:[Spring Boot and RabbitMQ 初探](https://mp.weixin.qq.com/s/v-ZuBwd5NMlG6a40sdiVXw) 中關(guān)于【延遲隊列】部分!
---
好了,今天的分享就到這里了。我是小馮,一名Java程序員,專注于程序設計和開發(fā),如果你在開發(fā)上遇到問題,歡迎一起交流,微信公眾號:馮文議(ID:fwy-world)。