首页 > 解决方案 > Laravel 6.0,排队的作业不在服务器上排队

问题描述

我有大约需要 3-5 分钟的视频创建过程。我已经使用 Laravel 作为后台任务完成了它EventsListeners并且Queues

变化

.env文件中

QUEUE_CONNECTION=database

在数据库中创建jobsfailed_jobs表。

创建视频事件

<?php

namespace App\Events;

class CreateVideoEvent
{

    public $video_data;

    public function __construct($video_data)
    {
        $this->video_data = $video_data;
    }
}

创建视频监听器

<?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
    }
}

导师

[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

当视频创建过程应该开始时,它会向 DB 添加一个事件和一个队列作业。

event(new CreateVideoEvent($video_data));

所以,问题是当第一个工作开始工作时(大约需要 3-5 分钟),我在第一个完成之前创建第二个视频,它在第一个完成之前开始第二个视频创建过程。因此,基本上,作业没有排队,并且由于两个视频创建过程都停止工作,这会导致问题。

也许我错过了一些东西,或者你知道这可能是什么原因吗?

标签: linuxlaravelqueuesupervisord

解决方案


推荐阅读