Laravel 5.5 — Horizon не запускает вторую очередь автоматически

Используя Laravel Horizon в Forge с Redis, у меня есть default очередь и notifications очередь.

Все задания уведомлений создаются с состоянием паузы под недавними заданиями и НЕ обрабатываются. Это код, используемый:

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

Единственный способ, который я нашел для их обработки, — это вручную явно запустить следующую команду для notifications обрабатывать:

php artisan queue:work --queue=notifications

Разве это не должно быть автоматическим, как оно приходит? Что мне не хватает?

2

Решение

Нам нужно поручить Horizon запустить работника очереди, который обрабатывает notifications очередь в дополнение к default очереди, добавив элемент в рабочую конфигурацию очереди в конфиг / horizon.php:

'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 запускает рабочие процессы очереди для каждой из двух очередей, которые запускаются одновременно.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]