Настройка очередей в Laravel, параллельная работа задач
Веб-проекты часто имеют список задач, которые желательно откладывать, чтобы не задерживать ответ от сервера. К таким задачам относятся различные оповещения (email, telegram и пр.).
Для последующего наблюдения за списком задач будем использовать Telescope.
Для последующего наблюдения за списком задач будем использовать Telescope.
Установка Telescope
composer require laravel/telescope
php artisan telescope:install
php artisan migrate
php artisan telescope:publish
После установки Telescope будет доступен по ссылке /telescope. Наши задачи мы будем отслеживать во вкладке Jobs.Настройка очередей
В качестве поставщика будем использовать базу данных Mysql (аналогично может использоваться и PostgeSQL).
Для этого укажем в файле .env параметры подключения к БД: DB_CONNECTION, DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD.
Затем создадим таблицы для хранения данных очередей:
php artisan queue:table
php artisan migrate
В файле .env добавим еще один параметр поставщика очереди:
QUEUE_DRIVER=database
Применим новые значения конфигурации с помощью команды php artisan config:clear.
Запуск задач на выполнение может выполняться в ручную с помощью команды
php artisan queue:work
Но мы автоматизируем постоянную работу очередей с помощью Supervisor.
Настройка Supervisor
Установка процесс-монитора на Ubuntu:
sudo apt-get install supervisor
Затем в конфигурации по пути /etc/supervisor/conf.d укажем наши задачи:
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/forge/app.com/artisan queue:work --tries=3 --delay=10
autostart=true
autorestart=true
user=forge
numprocs=8
redirect_stderr=true
stdout_logfile=/home/forge/app.com/worker.log
К команде добавим параметры --tries=3 и --delay=10, что означает, что неуспешно выполненные задачи будут повторяться 3 раза с интервалом в 10 с. В конфигурации укажем количество процессов очередей numprocs=8. Если сервер у вас работает от www-data, то укажем его название user=www-data.
После сохранения новой конфигурации мы можем запустить монитор:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*
Комментарии
Отправить комментарий