在laravel中完成队列后执行任务

时间:2015-05-28 11:06:19

标签: laravel queue

我在laravel

中有如下的队列
Mail::queue($notificationCreated->template, $data, function ($message) use ($data) {
$message->to($data['email'], $data['first_name'])->subject($data['subject']);
});

是否可以在队列完成执行后执行任务,即在发送邮件后的情况下。

1 个答案:

答案 0 :(得分:0)

API中没有这样的内容,因为这不是Queue的重点。

它是异步所以在调用Mail::queue之后,你会立即恢复控制并继续执行代码。这并不意味着实际的工作已被执行,只是已经安排好了。 并且没有办法在那里写Mail::whenJobIsComplete,因为这意味着你的代码的整个执行必须停止并等待作业完成。这不可能异步

但是,您可以定期轮询查看已完成的作业,并在发生这种情况时执行代码。有build-in功能可用于轮询API中的失败作业。

但最好的方法是编写自己的自定义queue listener, 并添加handleWorkerOutput call以外的功能。 同样,这是异步的,此代码将在未来的某个不确定点运行,甚至不在您最初调用Mail::queue的位置附近。