Laravel 5.5 - Horizo​​n不会自动运行第二个队列

时间:2018-03-17 14:21:33

标签: php laravel laravel-5 laravel-horizon

使用Redis Forge上的Laravel Horizo​​n,我有一个default队列和一个notifications队列。

通知作业都是在最近的作业下以暂停状态构建的,并且不会被处理。这是使用的代码:

$event->owner->notify((new ItemWasLiked($event))->onQueue('notifications'));

我发现处理它们的唯一方法是显式地为notifications手动运行以下命令来处理:

php artisan queue:work --queue=notifications

这不是自动进入的吗?我错过了什么?

1 个答案:

答案 0 :(得分:2)

我们需要通过向 config / horizo​​n.php中的队列工作程序配置添加一个元素来指示Horizo​​n启动一个队列工作程序,该队列工作程序除notifications队列外还处理default队列

'environments' => [
    ...
    '(environment name)' => [
        'supervisor-1' => [
            ...
            'queue' => [ 'default', 'notifications' ],
        ],
    ],
],

'queue'指令声明Horizo​​n工作人员监视作业的队列。开箱即用配置仅指定default队列,因此工作人员将仅处理推送到该队列的作业。以上大致相当于:

php artisan queue:work --queue=default,notifications

...逗号分隔列表中的第一个队列具有最高优先级,最后一个队列具有最低优先级。 Horizo​​n通过分配更多的进程数而不是按优先级顺序处理队列来对队列进行优先级排序。

或者,我们可以将第二个工作组添加到处理第二个队列的配置中:

'(environment name)' => [
    'supervisor-1' => [
        ...
        'queue' => [ 'default' ],
    ],
    'supervisor-2' => [
        ...
        'queue' => [ 'notifications' ],
    ],
],

... Horizo​​n为两个同时运行的队列中的每个队列启动队列工作进程。