2013-07-01 84 views
5

我对Laravel 4中的整个Queue'd工作很感兴趣。我有一些过程繁重的任务,我需要网站在用户执行操作后在后台运行特定行动。如何使用beanstalkd激发Laravel队列

我用这个当我在做我的网站在当地的发展:

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

而且我用的是当地的“同步”司机这样做。 (这些工作只会自动启动,影响用户体验,但我假设在进入生产阶段时我可以将其切换到豆背板,然后它们将在后台运行)

这将我带到哪里现在。我已经设置了beanstalkd,并在composer和beanstalkd进程中安装了依赖项来侦听新的作业。我安装了一个beanstalk管理界面,可以看到我的作业进入队列,但我不知道如何让它们运行!

任何帮助将受到欢迎,谢谢!

回答

18

这实际上是Laravel中记录非常糟糕的功能。

你实际上需要做的是在自动加载的文件夹中有JobClass.php,我使用应用程序/命令,但如果你喜欢,它们也可以在应用程序/控制器或应用程序/模型中。而这个函数需要一个带有$ job和$ data参数的fire事件。

要运行这些,只需在您的终端中执行php artisan queue:listen --timeout=60,它将忙于清空队列,直到它为空,或运行时间超过60秒。 (小注:超时时间限制开始队列,所以如果1个作业需要10秒就可以了69秒跑完

如果你只是想运行1个作业(完美的测试),运行php artisan queue:work

有一些工具可以确保您的作业处理程序继续运行,但是我建议您根据数据需要处理的速度以及数据量,每X分钟创建一个Cron任务进来

+0

谢谢,解决了所有问题! – Tyrone

+0

谢谢。 Laravel确实需要更好的文档。一个伟大的框架,但糟糕的文档仍然很糟糕。 – woens

0

请记住,你需要你的工匠路径

php/some/path/to/artisan队列:工作