【问题标题】:laravel scheduler withoutOverlapping when using queues (database)使用队列(数据库)时没有重叠的 laravel 调度程序
【发布时间】:2018-12-04 18:38:02
【问题描述】:

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

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

withoutOverlapping 在同步模式下运行良好,但现在我已将驱动程序更改为QUEUE_DRIVER=database,并且该作业每分钟都会写入数据库作业表,即使旧作业可能仍在运行。

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

【问题讨论】:

  • 使用哪个服务器?
  • @sadaiMudiNaadhar Azure WebApp
  • 您平时的作业执行有没有遇到什么问题?
  • @sadaiMudiNaadhar 你的意思是,在使用同步驱动程序时?一切都很好。但是我现在需要使用数据库驱动程序。
  • 不问你是否将驱动程序更改为数据库并遵循 Laravel 文档中的步骤?完成此配置后,您有什么问题吗?

标签: php laravel queue schedule


【解决方案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 来跟踪您的工作活动

【讨论】:

    猜你喜欢
    • 2023-03-09
    • 2019-01-01
    • 2018-07-17
    • 2017-11-18
    • 2017-02-10
    • 2018-12-12
    • 2013-12-11
    • 2013-12-01
    • 2023-03-06
    相关资源
    最近更新 更多