如何用beanstalkd解雇Laravel队列

Tyr*_*one 5 jobs beanstalkd laravel

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

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

Queue::push('JobClass', array('somedata' => $dataToBeSent));
Run Code Online (Sandbox Code Playgroud)

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

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

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

Nic*_*aag 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任务.