При установленном Horizon команды Artisan queue:work
и horizon:work
выполняют те же задачи, за исключением того, что horizon:work
принимает аргументы, которые он использует для координации с супервизором Horizon.
При запуске процесса супервизора Horizon (через artisan horizon
) нам никогда не нужно выполнять horizon:work
вручную. Команда horizon:work
запускает рабочий процесс очереди, а супервизор запускает его автоматически при настройке пулов рабочих.
Под супервизором я имею в виду процесс диспетчера Horizon, а не супервизор системы, который мы используем для запуска Horizon как службы.
Фактически, horizon:work
помечен как скрытый, поэтому мы даже не увидим его в доступных командах, показанных artisan list
.
Мы по-прежнему можем выполнять artisan queue:work
вручную, чтобы запустить отдельный автономный работник очереди, которым не управляет Horizon.
Команда artisan queue:work --once <connection>
более полезна, поскольку она обрабатывает следующий ожидающий элемент в очереди и может помочь отладить некорректные задания в разработке.
Чтобы это было эффективно, нам нужно запустить его после остановки любых длительно работающих обработчиков очереди, чтобы мы могли контролировать выполнение задания. Horizon упрощает это:
php artisan horizon:terminate
person
Cy Rossignol
schedule
12.04.2018