2020 年,因为新冠疫情原因很多行业交流会议被取消,这就涉及到如何处理退款,理想的场景是当我们在系统管理界面点击取消按钮时,就会在后台自动批量处理所有已付款用户的退款,然后给对应用户发送会议取消和退款成功通知。
编写任务类
对于这样的耗时操作,显然可以借助消息队列来异步处理。我们创建一个对应的会议取消任务类 CancelConference
,在 handle
方法中,我们在 each
方法的匿名函数中为每一个参会者处理退款,并发送邮件通知:
处理队列任务超时
这里面,如果使用了第三方支付服务的话,退款需要涉及到网络请求,邮件发送也是个耗时操作,而 Laravel 任务类默认的超时时间是 60s,可能不够,你可以指定 --timeout
将其延长:
这里我们将其设置为了 300 分钟,也就是 5 个小时,之所以设置这么长,是因为 CancelConference
会在一次执行期间为所有参会者退款并发送通知。
当然,和 tries
、--backoff
等参数一样&