laravel

Очереди в Laravel + Supervisor

Переключим настроку работы наших очередей с синхронного режима на 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

Откроем любой менеджер БД и убедимся что очередь добавилась:

Выполним команду чтобы вручную запустить джобу на выполнение:

php artisan queue:work --queue=high,default,myQueue

Profit!

Laravel очереди учимся использовать и что это такое | Laravel Queues | Laravel Jobs

Настройка супервизора для 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

Leave a reply