У меня есть процессы создания видео, которые занимают около 3-5 минут. Я сделал это как фоновые задачи, используя Laravel Events
, Listeners
и Queues
Изменения
В файле .env
QUEUE_CONNECTION=database
Созданы таблицы jobs
и failed_jobs
в БД.
CreateVideoEvent
<?php
namespace App\Events;
class CreateVideoEvent
{
public $video_data;
public function __construct($video_data)
{
$this->video_data = $video_data;
}
}
CreateVideoListener
<?php
namespace App\Listeners;
use App\Events\CreateVideoEvent;
use Illuminate\Contracts\Queue\ShouldQueue;
class CreateVideoListener implements ShouldQueue
{
public function __construct()
{
//
}
public function handle($event)
{
// Run video create commands
}
}
Supervisor
[program:laravel-queue]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/project_folder/artisan queue:work --tries=5 --timeout=600
autostart=true
autorestart=true
user=root
numprocs=8
redirect_stderr=true
stdout_logfile=/var/www/project_folder/worker.log
Когда должен начаться процесс создания видео, он добавляет событие и задание очереди в БД.
event(new CreateVideoEvent($video_data));
Итак, проблема в том, что первое задание начинает работать (это занимает 3-5 минут), и я создаю второе видео, прежде чем первое будет завершено, оно запускает второе видео процесс создания до завершения 1-го. Таким образом, в основном, задания не ставятся в очередь, и это вызывает проблему, так как оба процесса создания видео перестают работать.
Может быть, я что-то упустил, или у вас есть идея, что может быть причиной этого?