В чем разница между ремесленной очередью: работа и ремесленным горизонтом: работа?

Я использую очереди Laravel и Redis с Horizon. Супервизор запускает artisan horizon, который, в свою очередь, порождает процессы /usr/bin/php7.2 artisan horizon:work redis

Нужно ли вообще запускать queue:work или Horizon уже может обрабатывать очередь самостоятельно?


person Margus Pala    schedule 14.02.2018    source источник


Ответы (1)


При установленном 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