Sail: черги та воркери
Як крутити черги Laravel, коли застосунок у Sail. Разом із БД і сервісами для Redis/RabbitMQ і Оточенням і деплоєм для .env на різних машинах.
Навігація: Усі інструменти · Sail · БД · Env · Діагностика
Зміст
- Підключення одним поглядом
- Запуск
queue:workу Sail - Horizon (Redis)
- RabbitMQ і пакети AMQP
- Невдалі джоби й повтори
- Зміна коду й
queue:restart - Планувальник (
schedule:run) - Контраст із production
Підключення одним поглядом
| Драйвер | У Sail |
|--------|--------|
| sync | Дебаг логіки джоба без воркера; без паралелізму. |
| database | Простий async; потрібна таблиця jobs і один або більше воркерів. |
| redis | Типовий вибір; з Horizon; потрібен сервіс Redis. |
| sqs | Хмарна черга; ключі AWS; рідко лише локально. |
| rabbitmq (через пакет) | AMQP; потрібні контейнер + пакет. |
QUEUE_CONNECTION у .env. Після змін: sail artisan config:clear.
Запуск queue:work у Sail
sail artisan queue:work
Корисні прапорці:
sail artisan queue:work redis --queue=high,default --tries=3 --timeout=90
Окремі термінали — для різних черг. Разовий запуск:
sail artisan queue:work --once
Horizon (Redis)
Потрібні QUEUE_CONNECTION=redis і встановлений Horizon.
sail artisan horizon
Дашборд Horizon — за налаштованим шляхом (часто /horizon з auth). У production Supervisor або systemd тримає Horizon; у Sail зупиняється Ctrl+C.
RabbitMQ і пакети AMQP
У Laravel немає офіційного драйвера RabbitMQ. Кроки:
- Додати сервіс RabbitMQ у Compose (приклад).
- Встановити підтримуваний AMQP-пакет; опублікувати конфіг.
QUEUE_CONNECTION(або ім’я з’єднання) за документацією пакета.- Запуск:
sail artisan queue:work rabbitmq
Перевірте відкладені джоби, failed маршрутизацію й TTL — семантика AMQP відрізняється від Redis-списків.
Невдалі джоби й повтори
- Міграція
failed_jobs, якщо драйвер failed —database. - Перегляд:
sail artisan queue:failed - Повтор одного:
sail artisan queue:retry {id} - Очистка:
sail artisan queue:flush
Налаштуйте $tries, $timeout, backoff, щоб уникнути «отруєних» повідомлень.
Зміна коду й queue:restart
Довгоживучі воркери кешують bootstrap застосунку. Після деплою коду (або зміни гілки):
sail artisan queue:restart
Horizon теж реагує. Для швидкої ітерації локально — --max-jobs=1 або --once.
Планувальник (schedule:run)
У Sail немає cron-демона за замовчуванням. Варіанти:
- Вручну:
sail artisan schedule:run sail run --rm laravel.test php artisan schedule:work(Laravel 8+) — довгий процес планувальника в dev.- У production — один cron на хвилину викликає
schedule:run.
Контраст із production
| Тема | Sail (локально) | Production | |------|-----------------|------------| | Життєвий цикл воркера | Термінал вручну / Horizon на передньому плані | Supervisor, Kubernetes Job, керований worker | | Масштаб | Один контейнер | Кілька воркерів, autoscale | | Redis | Один контейнер | Кластер / керований кеш | | RabbitMQ | Dev-контейнер | Кластер, політики, моніторинг |
Sail — достатньо, щоб писати джоби й інтеграційні тести, не модель навантаження чи HA.