Laravel длительное выполнение задания очереди вторым рабочим - PullRequest
0 голосов
/ 07 января 2020

У меня проблема с laravel длительным процессом, который добавлен в очередь. Использование драйвера базы данных и супервизора. Проблема в том, что после того, как рабочий № 1 выбрал эту работу, он должен выполнить тяжелую обработку (от 5 до 20 минут), и к этому времени рабочий № 2 тоже выберет эту работу! Как с этим бороться?

Как я добавляю эти долго выполняющиеся задания:

Artisan::queue('process:import', [
    'file' => $file_to_import->id,
]);

Текущая очередь. php

'database' => [
    'driver' => 'database',
    'table' => 'jobs',
    'queue' => 'default',
    'retry_after' => 1800,
],

В настоящее время я ограничил numpro c до 1.

Текущая конфигурация супервизора

[program:laravel-worker-autoitbs]
process_name=%(program_name)s_%(process_num)02d
command=php /home/web/www/xxx/public_html/artisan queue:work database --memory=2048 --sleep=3 --tries=3 --timeout=0
autostart=true
autorestart=true
user=web
numprocs=1
redirect_stderr=true
stdout_logfile=/home/web/www/xxx/logs/worker.log

1 Ответ

1 голос
/ 07 января 2020

Я предполагаю, что механизм очереди считает, что ваше долгосрочное задание истекло, поэтому оно возвращается в очередь. Это тогда подобрано вторым рабочим, который также пытается обработать работу.

Вы указали --timeout=0, поэтому само задание не будет превышено по времени.

Возможно, что-то еще делает время ожидания до того, как задание выполнено. Например, соединение с базой данных может быть потеряно. Не могли бы вы проверить журналы на наличие тайм-аутов?

...