如何实现订单自动取消的业务场景?
我们在美团外卖下单, 加入没有立即支付, 进入订单详情页面, 会显示倒计时, 如果倒计时完毕, 订单就会被自动取消
这篇文章, 笔者想深入剖析订单超时自动取消的业务场景
方案一: 定时轮询
我们自然而然的想到, 通过一个定时器, 定时查询最近未支付的订单
遍历查询出来的订单, 对其进行取消操作
这种方案实现相对简单, 但间隔的查询, 会对数据库造成一定的IO压力
特别是在订单量非常高时, 高频次的查询对数据库的性能是个不小的考验
方案二: 定时任务(单机版)
我们可以使用 Timer, ScheduledExecutorService, Quartz 来实现定时任务
然而, 假设应用A通过Quartz调度三个定时任务A,B,C
当集群部署时, 可能出现多台机器同时执行任务的风险
虽然抢占任务, 我们可以通过Redis建立分布式锁, 但是这种方式并不优雅
同时定时任务应用内调度层经常空跑, 我们预期是希望三个定时任务A,B,C能均匀分布运行在应用A的不同实例内