#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.');
}