0
点赞
收藏
分享

微信扫一扫

订单超时取消如何设计

Gaaidou 2022-04-02 阅读 58

订单超时取消
待支付到支付之间可能存在订单取消的情况,那订单取消如何去设计才能更好呢?下面我们来看看这些设计方案的优缺点

1)定时任务扫描
很多人在开始设计这个功能的时候的第一个思路估计都是写个定时任务去扫描订单表,然后计算时间差满足取消时间就更新订单状态为取消,这种方案我在之前的系统里见过,但是存在问题,如果去扫描时恰恰时间差错过那么就不能按时间取消得到下一轮才能取消,还有就是订单表动辄几十万到几百万的数据,扫描一遍耗时太长,会给数据库增加压力

2)java的延时队列DelayedQuene,即将下单待支付的订单放入队列里,然后在规定的时间内把队列里的订单拿出来比较,如果超过规定时间则触发取消订单操作,这种方案同样存在错过时间差的情况,而且如果用的是自带的DelayedQuene,如果服务重启里面的数据也会一起消失

3)Rocketmq发送延时消息,这个目前比较靠谱,原理是生产者整合订单信息发送给消费者,中间有监听,在规定的时间内消息没有到达则代表已超时,则可以取消订单,这种方案下时间目前没有支持扩展,如果不满足要求得重写一下

messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h



举报

相关推荐

0 条评论