Почему мои неудавшиеся задания исчезают после перехода на 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: App\Jobs\ExecuteAction

Кажется, что выполнение останавливается, а событие 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: App\Jobs\ExecuteAction
[2019-04-10 15:06:52][11926] Failed:     App\Jobs\ExecuteAction
[2019-04-10 15:06:52][11926] Processed:  App\Jobs\ExecuteAction

В конф.

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

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

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


person odupont    schedule 10.04.2019    source источник
comment
Какой драйвер очереди вы используете?   -  person D Malan    schedule 10.04.2019
comment
Привет, я использую database.   -  person odupont    schedule 10.04.2019
comment
Если вы не укажете опцию --tries. Задание никогда не будет сохранено в отказавшей таблице ...   -  person shock_gone_wild    schedule 19.04.2019
comment
@shock_gone_wild После прочтения документации это не очевидно, но, взглянув на код Worker во фреймворке, кажется, что вы правы. В документе также объясняется, что я могу использовать public $tries = 5; в своем классе работы, но, похоже, он не используется.   -  person odupont    schedule 19.04.2019
comment
Насколько я могу судить, этот public $ пытается = 5 работает. Я только что протестировал его с указанием --tries = 2 и без указания --tries ind рабочей команды. В обоих случаях после 5 попыток задание отправляется в таблицу неудачных заданий.   -  person shock_gone_wild    schedule 19.04.2019


Ответы (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

person loic.lopez    schedule 17.04.2019
comment
Привет, спасибо за ответ. Я использую queue:listen из-за утечки памяти после нескольких тысяч заданий по HTTP-запросам. Я пробовал queue:work, и проблема та же. Что касается Horizon, я не могу использовать его, так как мое подключение к очереди - database, и оно работает только с redis. - person odupont; 18.04.2019
comment
Вы можете предоставить журнал? - person loic.lopez; 18.04.2019