我一直使用同步队列驱动程序,并且在我的调度程序中有一些长期运行的工作(长达一个小时):
$schedule->job(new ProcessFileUploads())->everyMinute()->withoutOverlapping(60);
在同步模式下,withoutOverlapping可以正常工作,但是现在我将驱动程序更改为QUEUE_DRIVER=database
,即使旧的作业可能仍在运行,该作业也会每分钟写入到DB作业表中。
我应该如何处理这种情况?
答案 0 :(得分:1)
替代方式
创建命令文件https://laravel.com/docs/5.7/artisan#generating-commands
然后在app \ Console \ Kernel.php中包含命令类
$schedule->command('Process:FileUploads')->withoutOverlapping(60);
在您的命令文件中handle()内
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
dispatch(new ProcessFileUploads());
}
这是与工作和计划程序一起工作的好方法
您可以利用https://laravel.com/docs/5.7/queues#job-events来跟踪您的工作活动