【发布时间】:2022-06-30 02:41:16
【问题描述】:
我只是将我们的 Laravel v8 队列驱动程序从 db 移动到 redis,使用 Horizon 进行管理。
无论我在config/horizon.php 中配置了什么,我只能在我的所有队列中获得一个工作进程,或者每个队列只有一个工作进程 - 但没有自动平衡。
我修改了主管 scheduler.conf 以运行 2 个(或更多)进程:
[program:horizon]
process_name=%(program_name)s_%(process_num)02d
command=php /www/E3/artisan horizon
autostart=true
autorestart=true
user=web
numprocs=2
redirect_stderr=true
stdout_logfile=/var/log/supervisor/horizon.log
stopwaitsecs=3600
但这似乎产生了多个主管(用 Horizon 的说法),每个主管只有一个工人,而不是每个主管有多个工人:
我认为 Horizon 配置正确:
'defaults' => [
'supervisor-1' => [
'connection' => 'redis',
'queue' => ['high', 'updatestock', 'priceapi', 'pubsub', 'klaviyo', 'default', 'low'],
'balance' => 'auto',
'processes' => 2,
'minProcesses' => 2,
'maxProcesses' => 10,
'maxTime' => 3600, // how long the process can run before restarting (to avoid memory leaks)
'maxJobs' => 0,
'balanceMaxShift' => 1,
'balanceCooldown' => 3,
'memory' => 128,
'tries' => 3,
'timeout' => 60,
'nice' => 0,
],
],
'environments' => [
'staging' => [
'supervisor-1' => [
'maxProcesses' => 3,
],
],
],
另外,在尝试进行各种更改时,我不再获得待处理/已完成中显示的任何数据 - json 响应显示计数,但不显示作业数据,例如 /horizon/api/jobs/completed?starting_at=-1&limit=50:
{
"jobs": [],
"total": 13157
}
【问题讨论】:
标签: laravel redis supervisord laravel-horizon