Laravel 6.0, поставленные в очередь задания не ставятся в очередь на сервере - PullRequest
0 голосов
/ 14 января 2020

У меня есть процессы создания видео, которые занимают около 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-го. Таким образом, в основном, задания не ставятся в очередь, и это вызывает проблему, так как оба процесса создания видео перестают работать.

Может быть, я что-то упустил, или у вас есть идея, что может быть причиной этого?

...