laravel - 如何在 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 关于队列的文档中也有解释。
他们使用主管始终让 N 个php artisan queue:work
并行运行的实例,如果其中任何一个失败,它会自动重新启动,因此您的队列将被正确处理
推荐阅读
- java - 如何在 Android 中将 PDF 文件转换为 WebP?
- c++ - 如何跨不同视口移植我的应用程序
- vue.js - 出现错误时如何突出显示 vee-validate 表单向导的输入字段?
- python-3.x - Python 写入 csv 文件:io.UnsupportedOperation: not writable
- javascript - Javascript/jQuery 使用随机数组键获取子数组值
- expression - 精确值计数器
- python - 如何以矢量化的方式从 spacy 的管道中获取文本嵌入?
- react-native - 我使用 npx 安装了 react-native。当我运行 npx react-native run-android 时,它给了我以下错误。IT 打开 AVD 但未显示应用程序
- javascript - 单击更改 ID 和类别
- discord.js - 如何为不和谐机器人创建踢命令?