任務(wù)執(zhí)行時(shí)間
在配置文件config/queue.php中棚品,每個(gè)連接都定義了retry_after項(xiàng)混卵。該配置項(xiàng)的目的是定義任務(wù)在執(zhí)行以后多少秒后釋放回隊(duì)列树瞭。如果retry_after設(shè)定的值為90, 任務(wù)在運(yùn)行90秒后還未完成锉罐,那么將被釋放回隊(duì)列而不是刪除掉荷并。毫無疑問号涯,你需要把retry_after的值設(shè)定為任務(wù)執(zhí)行時(shí)間的最大可能值目胡。
'redis'=> [
? ? ? ? ? 'driver'=>'redis',
? ? ? ? ? 'connection'=>'default',
? ? ? ? ? 'queue'=>'default',
? ? ? ? ?'retry_after'=>90,
],
隊(duì)列進(jìn)程超時(shí)
隊(duì)列進(jìn)程queue:work可以設(shè)定超時(shí)--timeout項(xiàng)。該--timeout控制隊(duì)列進(jìn)程執(zhí)行每個(gè)任務(wù)的最長(zhǎng)時(shí)間链快,如果超時(shí)讶隐,該進(jìn)程將被關(guān)閉。各種錯(cuò)誤都可能導(dǎo)致某個(gè)任務(wù)處于“凍結(jié)”狀態(tài)久又,比如 HTTP 無響應(yīng)等巫延。隊(duì)列進(jìn)程超時(shí)就是為了將這些“凍結(jié)”的進(jìn)程關(guān)閉:
php artisan queue:work --timeout=85
也可在任務(wù)類指定
public ?$timeout=85;
注意
配置項(xiàng)retry_after 和 Aritisan 參數(shù)項(xiàng)--timeout不同,但目的都是為了確保任務(wù)的安全地消,并且只被成功的執(zhí)行一次炉峰。參數(shù)項(xiàng)--timeout的值應(yīng)該是中小于配置項(xiàng)retry_after的值,這是為了確保隊(duì)列進(jìn)程總在任務(wù)重試以前關(guān)閉脉执。如果--timeout比retry_after大疼阔,則你的任務(wù)可能被執(zhí)行兩次。