使用Redis Forge上的Laravel Horizon,我有一个default
队列和一个notifications
队列。
通知作业都是在最近的作业下以暂停状态构建的,并且不会被处理。这是使用的代码:
$event->owner->notify((new ItemWasLiked($event))->onQueue('notifications'));
我发现处理它们的唯一方法是显式地为notifications
手动运行以下命令来处理:
php artisan queue:work --queue=notifications
这不是自动进入的吗?我错过了什么?
答案 0 :(得分:2)
我们需要通过向 config / horizon.php中的队列工作程序配置添加一个元素来指示Horizon启动一个队列工作程序,该队列工作程序除notifications
队列外还处理default
队列:
'environments' => [
...
'(environment name)' => [
'supervisor-1' => [
...
'queue' => [ 'default', 'notifications' ],
],
],
],
'queue'
指令声明Horizon工作人员监视作业的队列。开箱即用配置仅指定default
队列,因此工作人员将仅处理推送到该队列的作业。以上大致相当于:
php artisan queue:work --queue=default,notifications
...逗号分隔列表中的第一个队列具有最高优先级,最后一个队列具有最低优先级。 Horizon通过分配更多的进程数而不是按优先级顺序处理队列来对队列进行优先级排序。
或者,我们可以将第二个工作组添加到处理第二个队列的配置中:
'(environment name)' => [
'supervisor-1' => [
...
'queue' => [ 'default' ],
],
'supervisor-2' => [
...
'queue' => [ 'notifications' ],
],
],
... Horizon为两个同时运行的队列中的每个队列启动队列工作进程。