在 laravel 队列完成后执行任务

Execute a task after queue completion in laravel

我在 laravel

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

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

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

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

但是您可以定期轮询 完成的作业并在发生时执行代码。在 API.

中有 build-in 轮询失败作业的功能

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

的地方