我在使用自定義 laravel 隊(duì)列連接/隊(duì)列時(shí)遇到了一些問(wèn)題。這個(gè)特定的連接/隊(duì)列用于可能需要 5 分鐘到 10 小時(shí)的作業(yè)(大型數(shù)據(jù)聚合和數(shù)據(jù)重建)我有一個(gè)主管 conf 定義為[program:laravel-worker-extended]process_name=%(program_name)s_%(process_num)02dcommand=php /var/www/artisan queue:work --queue=refreshQueue,rebuildQueue --sleep=3 --timeout=86400 --tries=2 --delay=360autostart=trueautorestart=trueuser=rootnumprocs=4redirect_stderr=truestdout_logfile=/var/www/storage/logs/queue-worker.log我有一個(gè)隊(duì)列連接定義為: 'refreshQueue' => [ 'driver' => 'database', 'table' => 'jobs', 'queue' => 'refreshQueue', 'retry_after' => 420, // Retry after 7 minutes ],我通過(guò)以下命令使用命令將作業(yè)添加到隊(duì)列中:AggregateData::dispatch()->onConnection('refreshQueue')->onQueue('refreshQueue');構(gòu)造 DatabaseQueue 時(shí),retryAfter 定義為 420。但是這是我的工作日志:[2020-01-22 18:25:37] local.INFO: BEGINNING AGGREGATION [2020-01-22 18:25:37] local.INFO: Aggregating data [2020-01-22 18:27:08] local.INFO: BEGINNING AGGREGATION [2020-01-22 18:27:08] local.ALERT: AGGREGATION FAILED: Aggregation in progress 為什么當(dāng)我明確告訴它在 420 之后重試時(shí),它會(huì)在 90 秒后繼續(xù)重試?我已經(jīng)重建了我的容器,重新啟動(dòng)了隊(duì)列,并完成了我可以調(diào)試的所有其他事情......然后等待一段時(shí)間,我得到了最終的日志輸出:[2020-01-22 18:25:37] local.INFO: BEGINNING AGGREGATION [2020-01-22 18:25:37] local.INFO: Aggregating data [2020-01-22 18:27:08] local.INFO: BEGINNING AGGREGATION [2020-01-22 18:27:08] local.ALERT: AGGREGATION FAILED: Aggregation in progress [2020-01-22 18:33:04] local.INFO: [COMPLETE] Aggregating data [2020-01-22 18:33:04] local.INFO: Queue job finishedIlluminate\Queue\CallQueuedHandler@call我不太明白為什么隊(duì)列在 90 秒后繼續(xù)重試作業(yè)。我在這里做錯(cuò)了嗎?在此處編輯一些其他上下文:此方法in_progress在開(kāi)始時(shí)設(shè)置一個(gè)標(biāo)志,因此它不能在同一時(shí)間運(yùn)行兩次。日志可以解釋為:BEGINNING AGGREGATIONhandle():工作方法的第一行AGGREGATION FAILED: Aggregation in progress:failed()作業(yè)的方法通過(guò)異常處理失敗。這一行表明它再次嘗試了該作業(yè),并且遇到了設(shè)置為1已經(jīng)表示另一個(gè)作業(yè)正在處理的標(biāo)志。當(dāng)作業(yè)完成或遇到不同的異常(不是“進(jìn)行中”)時(shí),此標(biāo)志將重置為 0。Queue job finishedIlluminate\Queue\CallQueuedHandler@call我在服務(wù)提供者中添加了進(jìn)一步調(diào)試以偵聽(tīng)隊(duì)列完成事件。
Laravel 自定義隊(duì)列不尊重 retry_after
桃花長(zhǎng)相依
2022-07-29 10:31:52