【发布时间】:2015-04-30 00:05:21
【问题描述】:
我在 Heroku 上运行 Laravel 5。我将 Laravel 队列用于后台任务。侦听队列并运行其作业的最可靠方法是什么?
【问题讨论】:
标签: laravel heroku queue laravel-5
我在 Heroku 上运行 Laravel 5。我将 Laravel 队列用于后台任务。侦听队列并运行其作业的最可靠方法是什么?
【问题讨论】:
标签: laravel heroku queue laravel-5
像这样在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
【讨论】:
QUEUE_CONNECTION作为参数传递给queue:work,为什么还要指定它?
dispatch调用需要它。
如果您使用 Heroku 上的免费计划,很容易让工作进程运行以处理您的排队项目
为了确保你同时运行 worker 和 web dynos
heroku ps:scale
在没有运行的情况下启动worker dyno
heroku ps:scale worker=1
Proc 文件如下所示:
worker: php artisan queue:restart && php artisan queue:work --tries=3
查看来自工作人员的消息
heroku logs --ps worker
【讨论】:
更新:弃用通知
php artisan queue:work -h
--daemon Run the worker in daemon mode (Deprecated)
运行queue:work 会自动生成一个守护进程。不再需要该标志。
对我来说,它使用 Redis 作为队列驱动程序并在 web 进程之外设置队列 @987654323@ 进程。
我的 Procfile 如下所示:
web: vendor/bin/heroku-php-apache2 public/
worker: php artisan queue:work redis --sleep=3 --tries=3 --daemon
我真的不知道这是不是应该走的路,但现在可行。
编辑:
请注意,您正在这里启动另一个 dyno,所以如果您不使用 Heroku 上的免费层,现在价格翻倍。
【讨论】:
--deamon 模式在 Heroku 上是否适合您?
我发现将队列工作器作为守护进程运行 Laravel docs 与 supervisord supervisor docs 一起使用时效果很好,它将监视进程并在它因任何原因失败时重新启动它。
Laravel Forge 开箱即用地支持这一点,并为你提供了一个 GUI 来设置守护程序和主管任务,如果你愿意的话
【讨论】: