Laravel 队列作业多次运行同一作业

and*_*ini 5 laravel

我正在尝试查看 Laravel Queue 的工作情况,但遇到了一些问题。

所以我添加了一个 testJob

protected function schedule(Schedule $schedule)
{
    $schedule->job(new TestJob)->everyMinute();
}
Run Code Online (Sandbox Code Playgroud)

工作类没有任何作用,只是一个测试

class TestJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public function __construct()
    {
        //
    }

    public function handle()
    {
        //
    }
}
Run Code Online (Sandbox Code Playgroud)

正如文档所说,将 cron 添加到服务器

* * * * * cd /home/ec2-user/myproject-prod && php artisan schedule:run >> /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

最后,添加了主管工人

[program:myproject-queue]
process_name=%(program_name)s_%(process_num)02d
command=php /home/ec2-user/myproject-prod/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
user=ec2-user
numprocs=1
redirect_stderr=true
stdout_logfile=/home/ec2-user/supervisor-myproject-prod.log
Run Code Online (Sandbox Code Playgroud)

因此,正如下面的日志所示,在同一秒您可以看到同一个作业运行多次。

有时相同的作业运行一次(正确),很多时候它运行两次,有几次它运行 4 次。

[2019-11-14 08:25:02][5537] Processing: App\Jobs\TestJob
[2019-11-14 08:25:02][5537] Processed:  App\Jobs\TestJob
[2019-11-14 08:25:05][5538] Processing: App\Jobs\TestJob
[2019-11-14 08:25:05][5538] Processed:  App\Jobs\TestJob
[2019-11-14 08:26:03][5539] Processing: App\Jobs\TestJob
[2019-11-14 08:26:03][5539] Processed:  App\Jobs\TestJob
[2019-11-14 08:26:06][5540] Processing: App\Jobs\TestJob
[2019-11-14 08:26:06][5540] Processed:  App\Jobs\TestJob
[2019-11-14 08:27:03][5541] Processing: App\Jobs\TestJob
[2019-11-14 08:27:03][5541] Processed:  App\Jobs\TestJob
[2019-11-14 08:27:06][5542] Processing: App\Jobs\TestJob
[2019-11-14 08:27:06][5542] Processed:  App\Jobs\TestJob
Run Code Online (Sandbox Code Playgroud)

是在supervisor中运行8个进程之前,所以我改为1并遇到了同样的问题。

停止工作人员我可以在 MySQL 作业队列中看到它看起来是正确的,每分钟添加一个作业。

所以看起来像是工人之间的冲突。

那是对的吗?难道我做错了什么?

Laravel 任务调度程序是否已准备好用于包含数千个作业的生产?

Vik*_*iya 2

尝试..

php artisan queue:work --tries=1
Run Code Online (Sandbox Code Playgroud)