我在Heroku上运行Laravel 5。我使用Laravel Queue进行后台任务。什么是最可靠的方式来收听队列并运行它的工作?
答案 0 :(得分:8)
更新:弃用通知
php artisan queue:work -h
--daemon Run the worker in daemon mode (Deprecated)
运行queue:work
会自动生成一个守护程序。不再需要该标志。
对我来说,它使用Redis作为队列驱动程序,并为worker
进程另外设置了一个队列web
进程。
我的Procfile看起来像这样:
web: vendor/bin/heroku-php-apache2 public/
worker: php artisan queue:work redis --sleep=3 --tries=3 --daemon
我真的不知道这是不是应该采用的方式,但它现在有效。
修改强>
注意,你在这里开始另一个dyno,所以如果你没有在Heroku上使用免费套牌,它现在是价格的两倍。
答案 1 :(得分:1)
像这样(Laravel 5.6)在heroku中设置config var:
QUEUE_DRIVER=database
或者像这样(Laravel 5.7)在heroku中设置config var:
QUEUE_CONNECTION=database
在不运行的情况下启动辅助测功机
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
答案 2 :(得分:0)
我发现运行Queue Worker作为守护进程Laravel docs在与supervisord supervisor docs一起使用时效果很好,如果它因任何原因失败,它将监视进程并重新启动它。
Laravel Forge支持开箱即用,并为您提供设置守护程序和主管任务的GUI,如果这是您更喜欢的话
答案 3 :(得分:0)
如果您在Heroku上采用免费计划,则很容易让工作进程运行以处理排队的项目
为确保同时运行worker和网络测功机
heroku ps:scale
在不运行的情况下启动辅助测功机
heroku ps:scale worker=1
Proc文件如下:
worker: php artisan queue:restart && php artisan queue:work --tries=3
查看来自工作人员的消息
heroku logs --ps worker