gpt4 book ai didi

laravel - 如何使用 beanstalkd 启动 Laravel 队列

转载 作者:行者123 更新时间:2023-12-02 17:53:23 36 4
gpt4 key购买 nike

我对 Laravel 4 中的整个队列作业还很陌生。我有一些处理繁重的任务,我需要网站在被用户执行特定操作触发后在后台运行。

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

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

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

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

如有任何帮助,我们将不胜感激,谢谢!

最佳答案

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

您实际上需要做的是将 JobClass.php 放在自动加载的文件夹中,我使用 app/commands,但如果您愿意,它们也可以位于 app/controllers 或 app/models 中。并且此函数需要有一个接受 $job 和 $data 参数的触发事件。

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

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

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

关于laravel - 如何使用 beanstalkd 启动 Laravel 队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17407304/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com