【发布时间】:2017-03-12 18:29:18
【问题描述】:
有没有办法从 Laravel 中的作业 ID 中获取排队的作业?在将作业添加到队列时,我存储作业 ID。稍后在某个时间点(处理队列中的作业有延迟),我想从队列中删除作业。如果我可以使用作业 ID 获取队列中的作业,我可以使用 delete() 方法将其删除。
【问题讨论】:
标签: laravel queue laravel-5.2 jobs
有没有办法从 Laravel 中的作业 ID 中获取排队的作业?在将作业添加到队列时,我存储作业 ID。稍后在某个时间点(处理队列中的作业有延迟),我想从队列中删除作业。如果我可以使用作业 ID 获取队列中的作业,我可以使用 delete() 方法将其删除。
【问题讨论】:
标签: laravel queue laravel-5.2 jobs
这是一个队列,因此您无法选择它,但如果您也在队列之外记录数据,您可以查看添加到 AppServiceProvider.php 的 Queue::before(){} 以检查存储的 ID 或引用在作业离开队列并在处理之前。
我也在这个领域工作,所以如果我找到了这个代码,如果我找到了,我会发布它。当您在 before() 中返回一个事件时,您必须打开它并取出作业进行检查。
【讨论】:
我将此代码用于 laravel 5.5:
use Illuminate\Contracts\Bus\Dispatcher;
$job = ( new JOB_CLASS() )->onQueue('QUEUE_NAME')->delay('DELAY');
$id = app(Dispatcher::class)->dispatch($job);
【讨论】:
您可以使用 DB::table() 通过 id 搜索特定作业,并在调度作业时返回作业表的 id。
use DB;
class ServiceClass
{
public function deleteJobIfExists($id)
{
$jobTable = 'jobs';
$job = DB::table($jobTable)->find($id);
return $job ? ($job->delete ? 1 : -1) : 0;
}
}
【讨论】: