Laravel 的消息队列中 retry_after 与 timeout 不是很理解

我理解的消息队列,是将消息放在一个队列中,每次在消费的时候获取一条消息,对消息进行处理。
如果处理完成执行下一个消息。
但是如果某个消息处理过程中发生错误,这样可能会导致整个队列无法进行下去,这个时候引入处理超时。
设定一个时间,如果超过这个时间消息还没有执行完成,就放弃本次执行。
删除,或者再次压入队列中(对数据库操作,那种多个关联表操作,修改了第一个表,第二个表修改时有错误导致超超时就很尴尬,这要如何解决?事务?)
这样的话也不用两个判断,使用一个 timeout 就够了啊。
retry_after这个不知道有什么作用。感觉字面含义是重试,但这没有重试的机会啊。

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

retry_after 失败任务重试间隔时间

5年前 评论

我看了官方的英文文档,我说一下我对retry_after属性的理解吧:就是比如说你把retry_after设置为20,好,假设现在有一个job它需要耗费15到25秒不等的时间来完成,假设处理job的那个程序在处理到第20秒还没完成时,它就不继续处理了,把这个job放回任务队列中,然后再尝试处理(retry),这次运气好,它处理到17秒就完成了,那就完事了,接着处理下一个job。

5年前 评论
williamQian 4年前
coder_russell 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!