Laravel 队列系统配置参考大全
处理器进程
以下配置都是在启动队列处理器进程时设置。
队列连接
启动队列任务处理器进程时指定队列连接:
php artisan queue:work redis
没有指定的话默认使用 QUEUE_CONNECTION
配置值。
队列名称
启动队列任务处理器进程时指定队列名称,多个用 ,
分隔:
php artisan queue:work --queue=list,of,queues
没有指定的话默认是 default
队列。
处理器名称
还可以在启动时指定处理器进程名称:
php artisan queue:work --name=notifications
用于定义处理器进程不同时间段消费的队列:
执行一个队列任务
php artisan queue:work --once
设置执行任务上限
php artisan queue:work --max-jobs=1000
设置执行时间上限
php artisan queue:work --max-time=3600
维护模式依然执行
php artisan queue:work --force
设置内存使用上限(单位:M)
php artisan queue:work --memory=128
设置休眠时间
队列中没有任务休眠若干秒后再去拉取:
php artisan queue:work --sleep=1
设置延迟时间
队列任务执行失败后重试的延迟时间:
php artisan queue:work --backoff=0
延迟时间递增:
php artisan queue:work --backoff=30,60,300,900
设置超时时间
php artisan queue:work --timeout=60
设置尝试次数
php artisan queue:work --tries=3
队列任务
以下配置都是在具体的队列任务类中设置。
设置队列连接
public $connection = 'redis';
设置队列名称
public $queue = 'notifications';
设置重试延迟时间
public $backoff = 30;
延迟时间递增延长:
public $backoff = [30, 60, 300, 900];
或者通过 backoff
方法:
public function backoff()
{
return 30;
}
设置超时时间
public $timeout = 60;
设置尝试次数
public $tries = 3;
设置重试时间点
public $retryUntil = 1595049236;
或者通过 retryUntil
方法:
设置延迟执行时间
public $delay = 300;
模型不存在删除
public $deleteWhenMissingModels = true;
默认抛出 ModelNotFoundException
异常。
队列连接
以下配置都是在队列配置文件
config/queue.php
中设置。
queue
通过 queue
配置默认的队列名称:
retry_after
超过这个时间后,任务会被释放回队列,从而被其他处理器执行:
这是为了防止队列处理器进程卡在某个队列任务的处理上陷入阻塞状态,需要确保这个时间大于处理器中所有队列任务指定的超时时间。否则被处理的任务被释放回队列,导致重复执行。
block_for
只对 Redis/Beanstalkd 驱动有效,默认禁用,如果配置,则用于保持 Redis/Beanstalkd 的连接打开时间,直到有任务推送进来,可以减少网络 IO 和 CPU 开销:
Horizon
以下配置适用于 Horizon 配置文件
config/horizon.php
。
内存限制(单位:M)
'memory_limit' => 64,
trim
Horizon 会收集运行中或已处理队列任务的所有指标和信息,并将其存储在 Redis 中,这会占用内存空间,使用 trim
可以限定它们在内存中的存储有效期,过期后会自动删除:
fast_termination
默认情况下,Horizon 进程会等到所有处理器进行退出才会退出,对于一些耗时任务,可能需要等很久才能退出,将 fast_termination
设置为 true
可以在发送完退出信号后立即退出 Horizon,然后你就可以启动新的 Horizon 进程了,放心,老的处理器进程仍然会继续执行,直到手动任务处理完:
'fast_termination' => false,
supervisor.balance
设置 Horizon 的负载均衡:
supervisor.balanceMaxShift
定义 Horizon 每次伸缩处理器进程池时新增/减少的进程数量:
supervisor.balanceCooldown
每次 Horizon 弹性伸缩时等待的时间:
supervisor.nice
Horizon 处理器和 HTTP 服务器位于同一台机器,并且 CPU 使用率达到 100%,操作系统会按照优先级重启进程。在这种情况下,你应该给 Horizon 进程设置更低的优先级,以便可以先启动 HTTP 服务器恢复 Web 服务。
将 nice
设置为大于 0,即可让其他进程优先启动:
No Comments