Настройка очередей в Laravel, параллельная работа задач

Веб-проекты часто имеют список задач, которые желательно откладывать, чтобы не задерживать ответ от сервера. К таким задачам относятся различные оповещения  (email, telegram и пр.).
Для последующего наблюдения за списком задач будем использовать 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:*


Комментарии

Популярные сообщения