Если ты хоть раз крутил очередь в Laravel без Horizon, то знаешь этот ад: воркеры падают молча, задачи застревают, а логов толком нет. Ты сидишь, как шаман, с php artisan queue:work и смотришь, что там опять сдохло.
Horizon решает эту боль — даёт интерфейс, где видно, кто сдох, кто встал, сколько задач прошло, и что у тебя прямо сейчас в очереди. Красиво, удобно, но не серебряная пуля.
Установка: стандартный Laravel-ритуал
composer require laravel/horizon
php artisan horizon:install
php artisan migrate
В итоге у тебя в config/horizon.php лежит конфиг, а в браузере появится /horizon. Всё вроде просто.
Очередь: Redis или ничего
Да, Horizon работает только с Redis. Если ты до сих пор юзаешь database-драйвер или, не дай бог, sync — Horizon для тебя мёртвым грузом. Так что готовь Redis, без него никак.
В .env:
QUEUE_CONNECTION=redis
Horizon в работе
Запуск:
php artisan horizon
И вот у тебя есть панель по адресу /horizon. В ней видно:
- сколько воркеров живо;
- какие очереди загружены;
- какие задачи в работе или упали с ошибкой;
- среднее время выполнения.
На бумаге — мечта девопса. На деле — спасает от слепого дебага.
Настройки: где можно облажаться
В config/horizon.php ты описываешь балансировку, воркеров и очереди. Например:
'environments' => [
'production' => [
'supervisor-1' => [
'connection' => 'redis',
'queue' => ['default'],
'balance' => 'auto',
'processes' => 10,
'tries' => 3,
],
],
],
И вот тут многие кладут себе мину под проект: ставят balance => auto и думают, что Horizon сам решит, как грузить очереди. А потом воркеры то простаивают, то дохнут под нагрузкой.
Плюсы Horizon
- Видно, что реально происходит в очередях, а не только "ну вроде крутится".
- Легко дебажить упавшие задачи.
- Удобно управлять воркерами: не надо руками убивать процессы.
- Красивый UI — иногда этого хватает, чтобы показать менеджерам, что "система живая".
Минусы Horizon
- Только Redis. Хочешь другой драйвер — иди лесом.
- Под нагрузкой интерфейс может лагать, как школьный ноутбук.
- Иногда Horizon сам умирает и перестаёт обновлять данные. Ловишь момент, когда интерфейс показывает, что всё прекрасно, а на деле очередь стоит.
- Без грамотной настройки воркеров (
supervisors) ты просто получаешь красивую панельку для мониторинга хаоса.
Вывод
Horizon — это не "система управления очередями", а скорее зеркало: он просто показывает, что происходит. Но этого уже хватает, чтобы перестать дебажить в темноте.
Используй Horizon там, где Redis уже есть и проект живёт на очередях. Он экономит нервы и время. Но не жди, что он решит все проблемы. Если у тебя код — говно, Horizon это только красиво отобразит.
0 комментариев