laravel Horizon - задание отладки не выполняется/не обрабатывается

Я использую Laravel Horizon для обработки заданий в очереди. Ниже мой код

<?php

namespace App\Jobs;

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

    protected $podcast;

    public function handle(AudioProcessor $processor)
    {
        // Process uploaded podcast...
        Log::channel('slack')->send('Processing ...');
    }
}

В методе обработки заданий у меня есть регистрация в слабом канале. Когда этот тип заданий в очереди выполняется, я получаю слабый msg.

Иногда я говорю от 1% до 5%, когда я отправил задание ProcessPodcast::dispatch(), я не получил сообщение об отсутствии времени. И я не нашел работу на странице Horizon Failed Job. Это поведение совершенно случайно. Это очень трудно воспроизвести. Я думаю, что:

Случай № 1: Laravel не создал задание, поэтому задание не выполняется

Случай №2: Laravel создал задание, но Horizon его не запустил

В любом случае было бы очень полезно проверить, сохранено ли задание ProcessPodcast в Redis. Я не думаю, что это возможно с Redis.

Дайте рекомендации по отладке этой проблемы.


person Michael Nguyen    schedule 24.07.2019    source источник
comment
Какого рабочего вы используете php artisan queue work или php artisan horizon ?   -  person Clément Baconnier    schedule 24.07.2019
comment
php ремесленник горизонт   -  person Michael Nguyen    schedule 24.07.2019
comment
Вы можете увидеть, хранятся ли задания в Redis, с помощью Queue::size().   -  person Clément Baconnier    schedule 24.07.2019
comment
Queue::size() просто возвращает размер очереди. Horizon обрабатывает от 300 до 400 заданий в минуту, и каждое задание имеет номер horizon:123 (123 — идентификатор задания). Мне нужно зайти внутрь каждого задания (в Redis) и заглянуть внутрь файла ProcessPodcast. Это невозможно сделать вручную, учитывая количество заданий в очереди в минуту.   -  person Michael Nguyen    schedule 24.07.2019
comment
Я вижу, с таким количеством заданий будет сложно увидеть, сохранены ли ваши задания. Единственный способ, который я могу придумать, - это отслеживать Redis redis-cli monitor | grep -E ' "ProcessPodcast" ' Я не думаю, что это вам сильно поможет, но это единственное решение, которое я имею в виду, чтобы увидеть, эффективно ли задание переносится на Redis.   -  person Clément Baconnier    schedule 24.07.2019