Laravel隊列任務過期 & 超時

任務過期 & 超時

任務過期 在配置文件 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 的值,這是爲了確保隊列進程總在任務重試以前關閉。如果 --timeoutretry_after 大,那麼你的任務可能被執行兩次。

進程休眠時間 當任務在隊列中有效時,進程會持續處理任務,沒有延遲。不過,我們可以使用 sleep 配置項來指定沒有新的有效任務產生時的休眠時間:

php artisan queue:work --sleep=3
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章