【问题标题】:Laravel 5.5 - Horizon not running second queue automaticallyLaravel 5.5 - Horizo​​n 没有自动运行第二个队列
【发布时间】:2018-03-17 14:21:32
【问题描述】:

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

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

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

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

php artisan queue:work --queue=notifications

这不应该是自动的吗?我错过了什么?

【问题讨论】:

  • 是地平线running吗?您应该将其设置为通过主管之类的东西运行。
  • 当我们添加一个守护进程时,它应该会在 forge 上自动运行处理..

标签: php laravel laravel-5 laravel-horizon


【解决方案1】:

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

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

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

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

...其中逗号分隔列表中的第一个队列具有最高优先级,最后一个队列具有最低优先级。 Horizo​​n 通过分配更大份额的进程而不是按优先级顺序处理队列来确定队列的优先级。

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

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

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

【讨论】:

  • 你是救生员!我昨天花了一整天试图弄清楚这一点。所以我在horizon.php 中正确设置了所有队列,除了'(环境名称)',因为我的是development,而不是默认的production/local。所以我在队列中添加了一个development 块到地平线,它工作得很好。再次感谢你让我开心!
  • @Wonka 很好……不能说我真的直接回答了你的问题,但我很高兴你明白了!
猜你喜欢
  • 1970-01-01
  • 2018-05-29
  • 2022-08-15
  • 2022-10-20
  • 2020-09-27
  • 2016-04-03
  • 1970-01-01
  • 2021-05-22
  • 1970-01-01
相关资源
最近更新 更多