Я использую очереди Laravel и Redis с Horizon.
Супервайзер работает artisan horizon
который в свою очередь порождает процессы /usr/bin/php7.2 artisan horizon:work redis
Нужно ли бежать queue:work
или Horizon уже может обрабатывать очередь самостоятельно?
С установленным Horizon, Ремесленник queue:work
а также horizon:work
Команды выполняют те же задачи, за исключением того, что horizon:work
принимает аргументы, которые он использует для координации с супервизором Horizon.
При запуске процесса супервизора Horizon (через artisan horizon
), нам никогда не нужно выполнять horizon:work
вручную. horizon:work
Команда запускает рабочий процесс очереди, и супервизор запускает его автоматически при настройке рабочих пулов.
От руководитель, Я имею в виду процесс менеджера Horizon, а не системы supervisord который мы используем, чтобы запустить Horizon как сервис.
По факту, horizon:work
отмечен скрытый, поэтому мы даже не увидим его в доступных командах, показанных artisan list
,
Мы все еще можем выполнить artisan queue:work
вручную, чтобы запустить отдельного работника очереди, который не управляется Horizon.
artisan queue:work --once <connection>
Команда более полезна — она обрабатывает следующий ожидающий элемент в очереди и может помочь отладить некорректно выполняемые задания в процессе разработки.
Чтобы это было эффективным, мы должны запустить его после остановки всех долго работающих работников очереди, чтобы мы могли контролировать, когда выполняется задание. Horizon делает это легко:
php artisan horizon:terminate
Других решений пока нет …