在 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
.
的地方
我在 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
.