Laravel 队列系统配置参考大全


处理器进程

以下配置都是在启动队列处理器进程时设置。

队列连接

启动队列任务处理器进程时指定队列连接:

php artisan queue:work redis

没有指定的话默认使用 QUEUE_CONNECTION 配置值。

队列名称

启动队列任务处理器进程时指定队列名称,多个用 , 分隔:

php artisan queue:work --queue=list,of,queues

没有指定的话默认是 default 队列。

处理器名称

还可以在启动时指定处理器进程名称:

php artisan queue:work --name=notifications

用于定义处理器进程不同时间段消费的队列:

-w619

执行一个队列任务

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 方法:

-w640

设置延迟执行时间

public $delay = 300;

模型不存在删除

public $deleteWhenMissingModels = true;

默认抛出 ModelNotFoundException 异常。

队列连接

以下配置都是在队列配置文件 config/queue.php 中设置。

queue

通过 queue 配置默认的队列名称:

-w669

retry_after

超过这个时间后,任务会被释放回队列,从而被其他处理器执行:

-w657

这是为了防止队列处理器进程卡在某个队列任务的处理上陷入阻塞状态,需要确保这个时间大于处理器中所有队列任务指定的超时时间。否则被处理的任务被释放回队列,导致重复执行。

block_for

只对 Redis/Beanstalkd 驱动有效,默认禁用,如果配置,则用于保持 Redis/Beanstalkd 的连接打开时间,直到有任务推送进来,可以减少网络 IO 和 CPU 开销:

-w641

Horizon

以下配置适用于 Horizon 配置文件 config/horizon.php

内存限制(单位:M)

'memory_limit' => 64,

trim

Horizon 会收集运行中或已处理队列任务的所有指标和信息,并将其存储在 Redis 中,这会占用内存空间,使用 trim 可以限定它们在内存中的存储有效期,过期后会自动删除:

-w636

fast_termination

默认情况下,Horizon 进程会等到所有处理器进行退出才会退出,对于一些耗时任务,可能需要等很久才能退出,将 fast_termination 设置为 true 可以在发送完退出信号后立即退出 Horizon,然后你就可以启动新的 Horizon 进程了,放心,老的处理器进程仍然会继续执行,直到手动任务处理完:

'fast_termination' => false,

supervisor.balance

设置 Horizon 的负载均衡:

-w636

supervisor.balanceMaxShift

定义 Horizon 每次伸缩处理器进程池时新增/减少的进程数量:

-w659

supervisor.balanceCooldown

每次 Horizon 弹性伸缩时等待的时间:

-w652

supervisor.nice

Horizon 处理器和 HTTP 服务器位于同一台机器,并且 CPU 使用率达到 100%,操作系统会按照优先级重启进程。在这种情况下,你应该给 Horizon 进程设置更低的优先级,以便可以先启动 HTTP 服务器恢复 Web 服务。

nice 设置为大于 0,即可让其他进程优先启动:

-w631


点赞 取消点赞 收藏 取消收藏

<< 上一篇: 基于 Bus 门面或 dispatch 函数推送队列任务

>> 下一篇: 没有下一篇了