You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于用户平衡Laravel Horizon队列任务?

问题

用户A触发的流程会向队列派发1000+任务,当用户B触发相同流程时,由于任务都在同一队列,必须等A的任务全部完成才能执行。想实现基于用户的任务负载均衡,让A和B的任务同时处理,通过限制A的任务执行速度来容纳B的任务,当前使用Laravel Horizon但不知道如何配置。

现有任务派发代码:

// 为用户A、B在不同请求中派发任务
ProcessCSV::dispatch()->onQueue('default');

Horizon配置(horizon.php):

'supervisor' => [
    'connection' => 'redis',
    'queue' => ['default'],
    'balance' => 'auto',
    // 其他配置...
]

自行尝试的随机队列方案存在缺陷:不同请求可能生成相同随机数,用户增多时效果不符合预期。示例代码如下:
// 请求A为用户A派发任务

$userA = rand(1, 5);
ProcessCSV::dispatch()->onQueue($userA);

// 请求B为用户B派发任务

$userB = rand(1, 5);
ProcessCSV::dispatch()->onQueue($userB);

对应Horizon配置:

'supervisor' => [
    'connection' => 'redis',
    'queue' => ['1', '2', '3', '4', '5'],
    'balance' => 'auto',
    // 其他配置...
]
解决方案

1. 基于用户ID哈希分配固定队列

放弃随机队列方案,通过用户ID哈希映射到固定数量的队列,确保同一用户的任务始终进入同一队列,不同用户大概率分配到不同队列,避免随机冲突。

任务派发代码调整:

// 假设$userId为当前用户ID,映射到5个队列(可按需调整数量)
$queueId = crc32($userId) % 5 + 1;
ProcessCSV::dispatch()->onQueue("user-{$queueId}");

Horizon配置更新:

'supervisors' => [
    [
        'name' => 'user-queues',
        'connection' => 'redis',
        'queue' => ['user-1', 'user-2', 'user-3', 'user-4', 'user-5'],
        'balance' => 'auto',
        'processes' => 10, // 根据服务器资源设置总进程数
        'tries' => 3,
        // 其他配置项...
    ],
],

Horizon的auto平衡策略会自动为各队列分配进程,实现多用户任务并行处理。

2. 单用户队列并发限制(精准控速)

若需要严格控制单个用户的任务执行速度,可为每个用户队列单独配置Supervisor,限制其进程数:

Horizon配置:

'supervisors' => [
    [
        'name' => 'user-1',
        'connection' => 'redis',
        'queue' => ['user-1'],
        'balance' => 'simple',
        'processes' => 2, // 限制该队列最多2个并行进程
        'tries' => 3,
    ],
    [
        'name' => 'user-2',
        'connection' => 'redis',
        'queue' => ['user-2'],
        'balance' => 'simple',
        'processes' => 2,
        'tries' => 3,
    ],
    // 依次配置user-3至user-5的Supervisor
],

这种方式能确保单个用户的任务不会占用全部资源,多个用户的任务可同时执行。

3. 优先级辅助方案(可选)

若不想拆分队列,可给不同用户的任务设置不同优先级,但大量任务堆积时效果有限,不如队列隔离直观,因此更推荐前两种方案。

内容的提问来源于stack exchange,提问作者Bernard Wiesner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 08:13:30