繁体   English   中英

如何在Laravel 5.2中自动处理排队的作业

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM