问答 / 3 / 13 / 创建于 2年前
订单30分钟未支付自动取消,用户下单的时候,写入一个30分钟的延时队列,问题:30分钟到的时候可能队列阻塞,临界点查询的时候可能订单状态还是待支付,但是实际上应该是已取消!
方案1:在模型事件retrieved中查询下单时间超过30分钟但是状态还是未支付的订单执行以下订单取消代码方案2:状态不用数据库字段,根据多个字段(时间、是否支付等字段)返回一个订单状态
目前方案二是我常用的,请问大家还有没有比较合理的方案!
取消订单的时候加上过滤条件,只有状态是待支付的才能自动取消
@勇敢的心 只要用户看不出来, 那就是对的 不用纠结实现方式
30 分钟到的时候可能队列阻塞,临界点查询的时候可能订单状态还是待支付,但是实际上应该是已取消!
查询的哪里?查询的不就是实际吗
第1种方案,你这个可以用定时任务,每分钟跑一遍,把所有未支付的设置成取消。定时任务稳定发生,就不会有这个问题了。第2种方案,队列是可以有多个的。你看下larave的文档。然后把这个取消的单独用一个队列,这样应该会并发执行。第3种方案,换连接,就是队列的后端,把这种你认为需要及时处理的单独放那个连接。第4种方案,忽略这个问题,因为重要性比较低,别改代码。第5种方案,就是你的第2种方案,结合待支付和下单时间判断。
可以对 订单号 添加缓存有效期,支付时根据有效性分开处理;失效队列任务里也加上相应的有效性判断~
订单号
我要举报该,理由是:
取消订单的时候加上过滤条件,只有状态是待支付的才能自动取消
换种思路:
查询的哪里?查询的不就是实际吗
第1种方案,你这个可以用定时任务,每分钟跑一遍,把所有未支付的设置成取消。定时任务稳定发生,就不会有这个问题了。
第2种方案,队列是可以有多个的。你看下larave的文档。然后把这个取消的单独用一个队列,这样应该会并发执行。
第3种方案,换连接,就是队列的后端,把这种你认为需要及时处理的单独放那个连接。
第4种方案,忽略这个问题,因为重要性比较低,别改代码。
第5种方案,就是你的第2种方案,结合待支付和下单时间判断。
可以对
订单号
添加缓存有效期,支付时根据有效性分开处理;失效队列任务里也加上相应的有效性判断~