Почему мои неудачные задания исчезают после перехода на Laravel 5.8?

#laravel #laravel-queue #laravel-5.8

#laravel #laravel-очередь #laravel-5.8

Вопрос:

У меня есть проект Laravel с очередью, выполняющий ~ 1000 заданий в день.

Когда задание не выполняется, в версии 5.7 оно было перемещено в таблицу failed_jobs, и я смог повторить попытку.

После перехода на Laravel 5.8 задания просто исчезают.

Этот код должен пометить задание как неудачное и поместить его в таблицу неудачных заданий.

     /**
     * Execute the job.
     */
    public function handle()
    {
        throw new Exception('WRONG JOB');
    }
  

Журнал супервизора в этом случае:

 [2019-04-10 15:07:57][11932] Processing: AppJobsExecuteAction
  

Кажется, что выполнение останавливается, и событие Queue::failing не вызывается.

Этот код работает, но мне кажется неправильным.

 class ExecuteAction implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Execute the job.
     */
    public function handle()
    {
        try {
            throw new Exception('WROOONG');
        } catch (Exception $e) {
            if ($this->attempts() < $this->tries) {
                $this->release(10);
            } else {
                $this->fail($e);
            }
        }
    }
}
  

Вызывается событие Queue::failing .

Журнал супервизора ;

 [2019-04-10 15:06:52][11926] Processing: AppJobsExecuteAction
[2019-04-10 15:06:52][11926] Failed:     AppJobsExecuteAction
[2019-04-10 15:06:52][11926] Processed:  AppJobsExecuteAction
  

В supervisor conf

 command=php /path/to/laravel-project/artisan queue:listen
  

Что я делаю не так?

Спасибо за вашу помощь.

Комментарии:

1. Какой драйвер очереди вы используете?

2. Привет, я использую database .

3. Если вы не укажете параметр —tries . Задание никогда не будет сохранено в таблице сбоев…

4. @shock_gone_wild Это не очевидно после прочтения документации, но, изучив рабочий код в framework, кажется, вы правы. В документе также объясняется, что я могу использовать public $tries = 5; в своем классе заданий, но, похоже, он не используется.

5. Насколько я могу судить, этот public $tries = 5 работает. Я только что протестировал его с указанием —tries=2 и без указания —tries в рабочей команде. В обоих случаях после 5 попыток задание отправляется в таблицу неудачных заданий

Ответ №1:

Откуда: https://laravel.com/docs/5.8/queues

Команда: queue:listen была удалена из документации, и теперь рекомендуемый способ работы с очередями — выполнить: queue:work .

См.: https://laravel.com/docs/5.8/queues#running-the-queue-worker

Или вы можете использовать: Laravel Horizon

Комментарии:

1. Привет, спасибо за ваш ответ. Я использую queue:listen из-за утечки памяти после нескольких тысяч заданий по http-запросам. Я пробовал queue:work , и проблема та же. Что касается Horizon, я не могу использовать его как мое соединение с очередью database , и это только работа redis .

2. Вы можете предоставить журнал?