我对Laravel 4中整个Queue'd工作的事情都很陌生。我有一些过程繁重的任务,我需要在用户执行特定操作后触发后台运行。
当我在为我的网站进行本地开发时,我正在使用它:
Queue::push('JobClass', array('somedata' => $dataToBeSent));
我正在使用本地“同步”驱动程序来执行此操作。 (作业会自动触发,影响用户体验,但我在进入生产阶段时会假设我可以将其切换为beanstalkd,然后在后台运行)
这让我想到了现在的位置。我有beanstalkd设置与composer安装的依赖项和beanstalkd进程侦听新的作业。我安装了一个beanstalk管理界面,可以看到我的作业进入队列,但我不知道如何实际让它们运行!
任何帮助都会被谴责,谢谢!
答案 0 :(得分:18)
这实际上是Laravel中一个非常难以记录的功能。
你真正需要做的是将JobClass.php放在一个自动加载的文件夹中,我使用app /命令,但如果你愿意,它们也可以在app / controllers或app / models中。此函数需要有一个带有$ job和$ data参数的fire事件。
要运行这些,只需在终端中执行php artisan queue:listen --timeout=60
,它将忙于清空队列,直到它为空,或者它已运行超过60秒。 (小注意:超时是开始队列的时间限制,因此如果1个作业需要10秒,它可能会运行69秒。
如果您只想运行1份工作(非常适合测试),请运行php artisan queue:work
有像Supervisord这样的工具可以确保您的作业处理程序继续运行,但我建议根据需要处理数据的速度以及处理速度,制定一个每X分钟启动一次的Cron任务数据进来。
答案 1 :(得分:0)
请记住,你需要找到你的工匠。
php / some / path / to / artisan queue:work