laravel
Очереди в Laravel + Supervisor
В этой небольшой статье мы на примере нескольких строчек кода узнаем что такое очереди Laravel и научимся их использовать.
Переключим настройку работы наших очередей с синхронного режима на database через файл .env:
QUEUE_CONNECTION=database
Создадим таблицу для хранения очередей (по умолчанию Jobs):
php artisan queue:table php artisan migrate
Создадим класс джобы для тестирования
php artisan make:job JobTest
(JobTest создастся по адресу App/Jobs/)
Откроем её и добавим в метод handle код:
$msg = 'hello '.date('d-m-Y H:i:s'); file_put_contents(storage_path().'/jobjest.txt', $msg);
Попробуем добавить нашу джобу в очередь на выполнение:
php artisan tinker $job = new \App\Jobs\JobTest(); $job->delay(60); //отсрочим запуск на 60 секунд dispatch($job)->onQueue('myQueue'); //добавим в особую очередь myQueue
Откроем любой менеджер БД и убедимся что добавилась новая джоба: [ИМЯ НАШЕЙ БД]->[jobs] <= тут в таблице jobs должна появиться новая строчка со всеми данными джобы
Выполним команду чтобы вручную запустить джобу на выполнение:
php artisan queue:work --queue=high,default,myQueue
Profit!
Статья списана с одноименного видео-урока: Laravel очереди учимся использовать и что это такое | Laravel Queues | Laravel Jobs
ps: Обратите внимание что "очердь" и "job" это разные вещи. В каждую очередь поступают новые задачи(jobs) на выполнение. Логика вашего приложения сама будет решать в какую очередь добавить ту или иную задачу. У каждой очереди свои всевозможные параметры, например кол-во максимальной выделяемой оперативки, кол-во попыток выполнения при ошибке (У Laravel это все настраивается в "Supervisor").
Настройка супервизора для Laravel
Для автоматического запуска очередей необходимо настроить Supervisor
Установить командой :
sudo apt-get install supervisor
# 1. Создать файл конфигурации (ниже указано его примерное содержимое)
vi /etc/supervisor/conf.d/laravel-worker.conf
# 2. Перезагрузить конфигурационные файлы демона:
sudo supervisorctl reread
> laravel-worker: available
# 3. Перезагрузить файлы конфигураций и добавить/удалить необходимые
sudo supervisorctl update
> laravel-worker: added process group
# 4. Запустить все процессы группы "laravel-worker"
sudo supervisorctl start laravel-worker:*
# 5. Посмотреть статус всех процессов группы "laravel-worker"
sudo supervisorctl status laravel-worker:*
> laravel-worker:laravel-worker_00 RUNNING pid 23758, uptime 0:00:16
> laravel-worker:laravel-worker_01 RUNNING pid 23759, uptime 0:00:16
# 6. После изменения в PHP исходниках вы должны перезапустить очередь, поскольку queue:work работает как демон
php artisan queue:restart
> Broadcasting queue restart signal.
Содержимое файла /etc/supervisor/conf.d/laravel-worker.conf
[program:laravel-worker] process_name=%(program_name)s_%(process_num)02d command=php /var/www/artisan queue:work --sleep=3 --tries=2 autostart=true autorestart=true user=www-data numprocs=2 redirect_stderr=true stdout_logfile=/var/www/storage/logs/supervisor_queue-work.log
Другие полезные команды:
sudo php artisan config:cache sudo php artisan config:clear sudo php artisan queue:restart
4 years ago
А как добавить несколько очередей? Например, есть очередь для отправки уведомлений и очередь для экспорта в csv. В таком случае нужно создавать новый .conf или добавлять в laravel-worket?