如何在Laravel中停止正在运行的排队作业?

问题描述

我在laravel上使用Redis队列。一切运行正常。

我还在前端显示了队列中的作业。现在,我想从前端发出请求,要求终止已经运行或正在进行的作业。

预先感谢

解决方法

如果您真的想从前端执行此操作,唯一的方法(我知道)是使用您的查询生成器(甚至 Eloquent)继续检查数据库表上的条目作业的 handle() 方法并从那里停止。

例如,您的数据库中可以有一个表,比如 job_statuses,它将包含一个 job_id 和一个 status 列。然后您可以创建一个路由来将状态列更改为 aborted 之类的内容。现在,在您的 Job 类的 handle() 方法中检查状态是否在一些迭代后中止并抛出异常调用作业的 fail($e) 方法以正常停止工作并做一些额外的逻辑。像这样:

use Illuminate\Support\Facades\DB;

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