5

我对 Laravel 4 中的整个 Queue'd 作业非常陌生。我有一些繁重的任务,我需要网站在被执行特定操作的用户解雇后在后台运行。

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

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

我正在使用本地“同步”驱动程序来做到这一点。(这些作业会自动触发,影响用户体验,但我认为在进入生产阶段时我可以将其切换到 beanstalkd,然后它们将在后台运行)

这把我带到了我现在的位置。我已经设置了 beanstalkd,它使用了 composer 安装的依赖项,并且 beanstalkd 进程监听了新作业。我安装了 beanstalk 管理界面,可以看到我的作业进入队列,但我不知道如何真正让它们运行!

任何帮助将不胜感激,谢谢!

4

2 回答 2

18

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

你真正需要做的是将 JobClass.php 放在一个自动加载的文件夹中,我使用 app/commands,但如果你愿意,它们也可以在 app/controllers 或 app/models 中。并且这个函数需要有一个带有 $job 和 $data 参数的火灾事件。

要运行这些,只需php artisan queue:listen --timeout=60在您的终端中执行,它将忙于清空队列,直到它为空,或者它已经运行了超过 60 秒。(小提示:超时是启动队列的时间限制,所以如果1个作业需要10秒,它可能会运行69秒。

如果您只想运行 1 个作业(非常适合测试),请运行php artisan queue:work

有像Supervisord这样的工具可以确保你的作业处理程序继续运行,但我建议根据需要处理的数据的速度以及传入的数据量,创建一个每 X 分钟启动一次的 Cron 任务。

于 2013-07-01T21:13:20.680 回答
0

请记住,您需要引导您的工匠。

php /some/path/to/artisan queue:work

于 2014-11-01T02:29:59.050 回答