订单失效可以采用的方案

有这样这个场景,购物系统中,用户下订单后有30分钟的时间去付款,如果没有付款则失效该订单,暂时有以下两种方式:

a.采用延迟队列的方式(MQ),当用户下订单后,将用户的订单的标识全部发送到延时队列中,30mins后进去消费队列中被消费,消费时先检查该订单的状态,如果未支付则标识该订单失效。

流程如下:1.用户下订单时后台生成订单,然后又将该订单的标识发送给延时队列,消费者队列将收到的标识去

db中查订单的状态(可以使用缓存),如果未被消费则失效该订单(可以使用多监听队列来实现负载均衡)C1R1U1

-------------------------------------------------------------------------------------------------------------------------------------------------------

b.采用定时任务的方式,用户下订单后先生成订单信息,然后将该订单加入到定时任务中(30mins后执行),

当到达指定时间后检查订单状态,如果未支付则标识该订单失效。

流程如下: 1.用户下订单时后台生成订单,然后又将该订单的标识放到定时任务中,当到达指定时间后检查
订单状态,如果未被消费则失效该订单(采用线程池的方式来提高效率)C1R1U
1

两种方式对于db操作是一致的(可以加一层缓存)

这两种方式各有利弊

采用MQ的方式,可以实现订单模块和订单失效模块两部分的解耦,也可以实现分布+集群的方式来应对大量的

订单请求。但如果初期如果没有太多的业务时,会需要一定的成本

采用定时任务的方式,简单好操作,但订单和订单失效模块耦合在了一起。对于高并发的请求性能不高。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值