Если ты хоть раз крутил очередь в 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 это только красиво отобразит.