Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Добры день! Помогите разобраться с очередями. При локальной отладке всё работает, но на рабочем сервере Job запускается два раза. Job становится в очередь по расписанию в app\Console\Kernel.php:
$schedule->job(new PrepareNoCheckMailsJob())->dailyAt('09:00');
Воркер тоже запускается там же, только каждую минуту:
$schedule->command('queue:work --stop-when-empty')->everyMinute();
Задача создаётся и попадает в таблицу jobs.
В самой задаче заданы следующие параметры:
public $tries = 3;
public $timeout = 240;
В задаче есть логирование начала и окончание её выполнения. Судя по логам, ровно через две минуты, задача запускается повторно. Исключение — если задача успевает выполнится в эти самые две минуты.
Пытался запускать воркер таким образом:
$schedule->command('queue:work --once')->everyMinute();
Всё равно ровно через две минуты задача запускается повторно.
И почему две минуты мне тоже не понятно.
Локально воспроизвести такое поведение не могу.
Посоветуйте, как обуздать воркер?
Спасибо!
Не в сети
Спасибо, разобрался. Причина крылась в параметре retry_after конфигурации очереди (файл config/queue.php)
Этот параметр должен быть на несколько секунд больше, чем свойства задачи $timeout;
Цитата из документации:
The --timeout value should always be at least several seconds shorter than your retry_after configuration value. This will ensure that a worker processing a frozen job is always terminated before the job is retried. If your --timeout option is longer than your retry_after configuration value, your jobs may be processed twice.
Не в сети
Страницы 1