任务过期 & 超时
任务过期 在配置文件 config/queue.php 中,每个连接都定义了 retry_after 项。该配置项的目的是定义任务在执行以后多少秒后释放回队列。如果retry_after 设定的值为 60, 任务在运行 60 秒后还未完成,那么将被释放回队列而不是删除掉。毫无疑问,你需要把 retry_after 的值设定为任务执行时间的最大可能值。
注:只有 Amazon SQS 配置信息不包含 retry_after 项。Amazon SQS 的任务执行时间基于
Default Visibility Timeout,该项在 Amazon AWS 控制台配置。
队列进程超时 队列进程 queue:work 可以设定超时 --timeout 项。该 --timeout 控制队列进程执行每个任务的最长时间,如果超时,该进程将被关闭。各种错误都可能导致某个任务处于“冻结”状态,比如 HTTP 无响应等。队列进程超时就是为了将这些“冻结”的进程关闭:
php artisan queue:work --timeout=60
配置项 retry_after 和 Aritisan 参数项 --timeout 不同,但目的都是为了确保任务的安全,并且只被成功的执行一次。
注:参数项
--timeout的值应该始终小于配置项retry_after的值,这是为了确保队列进程总在任务重试以前关闭。如果--timeout比retry_after大,那么你的任务可能被执行两次。
进程休眠时间 当任务在队列中有效时,进程会持续处理任务,没有延迟。不过,我们可以使用 sleep 配置项来指定没有新的有效任务产生时的休眠时间:
php artisan queue:work --sleep=3
本文探讨了任务过期与超时的处理方式,介绍了如何通过配置retry_after和--timeout参数来确保任务安全执行,同时避免重复执行。此外,还讨论了队列进程的休眠时间设置。
1198

被折叠的 条评论
为什么被折叠?



