加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

使用Supervisor运行多个Laravel队列工作程序

发布时间:2020-12-14 01:20:40 所属栏目:Linux 来源:网络整理
导读:我使用Laravel队列使用数据库驱动程序和管理程序来保持队列工作程序始终运行: [program:laravel_queue]command=php artisan queue:listen --timeout=1800 --tries=5directory=/var/app/currentstdout_logfile=/var/app/support/logs/laravel-queue.loglogfi
我使用Laravel队列使用数据库驱动程序和管理程序来保持队列工作程序始终运行:

[program:laravel_queue]
command=php artisan queue:listen --timeout=1800 --tries=5
directory=/var/app/current
stdout_logfile=/var/app/support/logs/laravel-queue.log
logfile_maxbytes=0
logfile_backups=0
redirect_stderr=true
autostart=true
autorestart=true
startretries=86400
EOB

某些队列任务可能需要大约10分钟才能完成.

我有两个问题:

1)如何编辑上述脚本以在同一队列上运行多个(例如3个)队列工作程序.

2)是否有办法根据等待处理的作业数量来扩展运行的队列工作者数量?

问题2的原因是我们有很多繁忙的时间,然后很多安静的时间,所以我真的不想浪费资源与3个听众一直运行.

解决方法

在主管中,您可以使用参数numprocs指定进程数量,因此您可以在脚本中添加一行说明:

numprocs = 5

现在,您可以做一些聪明的事情,例如,如果只有一些队列上运行的进程花费的时间太长,您可以创建一组不同的队列进程来处理这些进程以及其他用于轻量级进程的进程.
为了实现这一点,您可以使用一个队列名称(如–queue = longprocess)创建一个超级用户配置,使用–queue = lightprocess创建另一个队列名称,并在程序中将作业分派到相应的队列中,这样,长进程不会延迟流程短.

您还可以在一个管理程序配置文件中指定queue priorities,例如–queue = lightprocess,longprocess.这样,您的工作人员将在运行longprocess之前首先查找lightprocess.

要回答你的第二个问题,不,就主管而言,所有进程都在运行,它不知道队列是忙还是空闲,因此它不能杀死进程并根据它们的使用创建它们,所以不,你可以没有动态配置,只有在您拥有的进程繁忙时才创建更多进程.

注意,如果分配的numprocs超过1个,则必须在该名称中添加进程数.根据主管配置文档:

Supervisor will start as many instances of this program as named by numprocs. Note that if numprocs > 1,the process_name expression must include %(process_num)s (or any other valid Python string expression that includes process_num) within it.

主管配置文档:http://supervisord.org/configuration.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读