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

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

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 2

retry_after 失败任务重试间隔时间

5年前 评论

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

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

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