我正在尝试查看 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 任务调度程序是否已准备好用于包含数千个作业的生产?