Laravel Heroku 上的队列工作者

Laravel Queue worker on Heroku

我 运行正在 Laravel 5 使用 Heroku。我正在为后台任务使用 Laravel 队列。 is/are 监听队列和 运行 工作的最可靠方法是什么?

我发现 运行 作为守护进程的 Queue Worker Laravel docs works well when used with supervisord supervisor docs 它将监视进程并在它因任何原因失败时重新启动它。

Laravel Forge 开箱即用地支持这一点,并为您提供一个 GUI 来设置守护进程和主管任务,如果您愿意的话

更新:弃用通知

php artisan queue:work -h

--daemon    Run the worker in daemon mode (Deprecated)

运行 queue:work 自动产生一个守护进程。不再需要该标志。


对我来说,它使用 Redis 作为队列驱动程序并在 web 进程之外设置一个队列 worker 进程。

我的 Procfile 看起来像这样:

web: vendor/bin/heroku-php-apache2 public/
worker: php artisan queue:work redis --sleep=3 --tries=3 --daemon

我真的不知道这是不是应该走的路,但目前它是可行的。

编辑:

请注意,您在这里启动了另一个 dyno,因此如果您不使用 Heroku 上的免费套餐,现在价格是双倍。

如果您在 Heroku 上使用免费 计划,很容易获得工作进程运行 来处理您排队的项目

确保您同时拥有 worker 和 web dynos 运行

heroku ps:scale

如果不是 运行

,则启动工人测功机
heroku ps:scale worker=1

Proc 文件如下所示:

worker: php artisan queue:restart && php artisan queue:work --tries=3

查看来自工作人员的消息

heroku logs --ps worker

像这样在 heroku 中设置配置变量 (Laravel 5.6):

QUEUE_DRIVER=database

或者像这样在 heroku 中设置配置变量 (Laravel 5.7):

QUEUE_CONNECTION=database

如果不是 运行

,则启动 worker dyno
heroku ps:scale worker=1

Procfile 如下所示: 注意:在 queue:work

之后指定要使用的驱动程序
web: vendor/bin/heroku-php-apache2 public/
worker: php artisan queue:restart && php artisan queue:work database --tries=3

查看来自工作人员的消息

heroku logs --ps worker

跟踪来自工作人员的消息

heroku logs --tail --ps worker