[英]How to automatically process queued job in laravel 5.2
我知道dispatch()
会将工作推入队列,而php artisan queue:work
将对其进行处理。 说如果我正在发送邮件。
$emailJob = (new SendEmailJob())->delay(Carbon::now()->addSeconds(3));
dispatch($emailJob);
echo "email sent";
此代码是什么意思? 将在3秒后发送邮件还是在3秒后将作业推入队列?
如果它将把工作排入队列,我将如何发送它。
在部署项目时,我当然不能做php artisan queue:work
。
假设我必须将邮件发送给1000个成员。
我将要做的是将所有作业推送到队列中,并使其在后台处理而不会影响其他流程。 就像其他请求即将到来一样。 它应该立即处理它。
作业的工作方式是您有一个队列工作器( php artisan queue:work
命令),该工作器等待作业进行处理,然后在计划的时间执行它们。
因此,您必须在开发环境中将其保持在后台运行,以使其能够捕获即将到来的工作并在适当的时机进行处理。
当队列处理器处于后台时,您可以触发将作业推入队列的代码。
第一行将安排作业在三秒钟后运行,因此延迟是执行时间,而不是排队时间。
然后, dispatch
功能是一个将作业实际推入队列的助手。
推送您的作业后,队列处理器将注意到它,并会看到它已被调度了3秒的延迟,因此只有在正确的调度时间到来时,它才会进行处理。
在生产中,您必须保留执行php artisan queue:work
的后台进程,以处理您的队列。 这是在Laravel的约队列文件解释,以及在这里 。
他们使用超级用户始终拥有php artisan queue:work
N个实例php artisan queue:work
并行运行,并且如果其中任何一个失败,它将自动重新启动,因此您的队列将得到正确处理
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.