Как остановить запущенное задание в очереди в laravel?

#php #laravel #cron #scheduled-tasks #jobs

#php #laravel #хрон #запланированные задачи #Вакансии

Вопрос:

Я использую redis queue в laravel. Все работает отлично.

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

Заранее спасибо

Ответ №1:

Если вы действительно хотите сделать это из интерфейса, единственным способом (который я знаю) было бы продолжать проверять запись в таблице базы данных с помощью Query Builder (или даже Eloquent) из handle() метода вашего задания и останавливаться оттуда.

Например, у вас может быть таблица в вашей базе данных, скажем, job_statuses которая будет иметь job_id и status столбец. Затем вы можете создать маршрут для изменения столбца состояния на что-то вроде aborted . Теперь в методе вашего Job класса handle() проверьте, не прервано ли состояние после нескольких итераций, и выдайте исключение ИЛИ вызовите fail($e) метод Job, чтобы изящно остановить задание и выполнить некоторую дополнительную логику. вот так:

 use IlluminateSupportFacadesDB;

if(DB::table('job_statuses')
    ->where('job_id',$this->getJobId())->first()->status === 'aborted'){
                //throw new Exception('Aborted by user.');
    }