如何使用beanstalkd解雇Laravel队列

时间:2013-07-01 14:48:08

标签: laravel jobs beanstalkd

我对Laravel 4中整个Queue'd工作的事情都很陌生。我有一些过程繁重的任务,我需要在用户执行特定操作后触发后台运行。

当我在为我的网站进行本地开发时,我正在使用它:

Queue::push('JobClass', array('somedata' => $dataToBeSent));

我正在使用本地“同步”驱动程序来执行此操作。 (作业会自动触发,影响用户体验,但我在进入生产阶段时会假设我可以将其切换为beanstalkd,然后在后台运行)

这让我想到了现在的位置。我有beanstalkd设置与composer安装的依赖项和beanstalkd进程侦听新的作业。我安装了一个beanstalk管理界面,可以看到我的作业进入队列,但我不知道如何实际让它们运行!

任何帮助都会被谴责,谢谢!

2 个答案:

答案 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