使用队列时的laravel调度程序而没有重叠(数据库)

时间:2018-12-04 09:59:56

标签: php laravel queue schedule

我一直使用同步队列驱动程序,并且在我的调度程序中有一些长期运行的工作(长达一个小时):

$schedule->job(new ProcessFileUploads())->everyMinute()->withoutOverlapping(60);

在同步模式下,withoutOverlapping可以正常工作,但是现在我将驱动程序更改为QUEUE_DRIVER=database,即使旧的作业可能仍在运行,该作业也会每分钟写入到DB作业表中。

我应该如何处理这种情况?

1 个答案:

答案 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来跟踪您的工作活动