Для багатьох розробників Laravel робота з чергами на спільному хостингу є певним викликом. Традиційно для керування чергами використовують Supervisor, але на більшості стандартних тарифних планів спільного хостингу його неможливо налаштувати. Це може здаватися проблемою, але не варто хвилюватися — існує ефективне рішення, яке дозволяє обробляти черги без Supervisor за допомогою CRON завдань і системи планування Laravel.
У VPS або на виділених серверах Supervisor є ідеальним інструментом для керування чергами, забезпечуючи їх безперервну роботу та автоматичне перезапускання при помилках. Однак на спільному хостингу не завжди є можливість встановити або налаштувати Supervisor. Тут ми можемо використовувати альтернативу, яка прекрасно підходить для багатьох застосунків.
Рішення, яке ми пропонуємо, полягає в поєднанні двох компонентів: CRON завдання, яке виконується щохвилини, та вбудованої системи планування Laravel з відповідними налаштуваннями черг. Такий підхід дозволяє обробляти черги на регулярних інтервалах, що є чудовим варіантом для більшості завдань.
Першим кроком є налаштування CRON завдання через cPanel або інший інтерфейс. Завдання повинно запускати планувальник Laravel кожну хвилину. Це зовнішній тригер, який активує систему. Ви маєте налаштувати CRON завдання з командою:
php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
Наступним кроком є налаштування планувальника Laravel для обробки черг. У файлі routes/console.php
потрібно додати наступний код:
use Illuminate\Support\Facades\Schedule;
Schedule::command('queue:work --tries=3 --stop-when-empty')
->everyMinute()
->withoutOverlapping();
Ця конфігурація виконує кілька важливих функцій: запускає працівника черги, намагається обробити завдання до трьох разів, зупиняє працівника після завершення всіх завдань, і забезпечує запуск кожну хвилину без перезапусків.
Щохвилини CRON завдання запускає планувальник, який перевіряє наявність працівника черги. Якщо він не працює, запускається новий процес обробки всіх завдань, після чого зупиняється до наступної хвилини.
Цей метод не дає миттєвого оброблення завдань, але забезпечує обробку із затримкою в одну хвилину, що для багатьох застосунків є більш ніж достатнім. Також цей підхід не використовує безперервно працюючі процеси, що дозволяє уникнути обмежень хостинг-провайдерів.
Звісно, цей підхід має кілька обмежень. Наприклад, обробка завдань не відбувається в реальному часі, а є затримка до однієї хвилини. Також для дуже великих і ресурсоємних застосунків інтервал у одну хвилину може бути недостатнім. Але для більшості сценаріїв цей підхід працює чудово.
Якщо ж ваш застосунок почне потребувати більш потужного рішення, можна безперешкодно перейти на VPS, де зможете використовувати Supervisor для більш надійного і постійного керування чергами.
Таким чином, метод CRON + планувальник Laravel пропонує практичну альтернативу для тих, хто використовує спільний хостинг, і дає можливість працювати з чергами без необхідності негайно переходити на більш дорогий тарифний план.
Перекладено з: Running Laravel Queues on Shared Hosting Without Supervisor