自动取消过期订单
今天我们来看另一个需要借助消息队列异步处理的业务场景 —— 自动取消已经放弃的订单。
在网上购物商城,我们需要为已经下单的实体商品订单(尤其是限量的抢购订单,或者需要依赖商家及时响应的外卖订单)设置支付有效期,以免用户下单后长时间不支付,或者根本不打算支付,而又没有手动取消,白白占用了库存额度,让其他想买的用户无法购买。
有了支付有效期后(通常是 15 分钟、半小时或者一小时),超过这个有效期,我们就认为用户放弃这个订单了,然后系统会自动取消这个订单,释放对应库存。显然,这可以通过 Laravel 消息队列提供的延迟分发功能来实现。
延迟处理任务
假设这个监控订单状态并在过期后将其取消的队列任务类是 MonitorPendingOrder
,对应的订单取消操作定义在 handle
方法中:
我们可以在分发这个队列任务时通过 delay
指定延迟时间:
这样一来,该任务就会