laravel6不能为作业队列设置延迟代码

nhhxz33t  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(272)

我需要帮助来更正运行作业的延迟代码。。我使用的是Laravel6,现在我正在抓取youtube的浏览量。
假设我有一个充满youtube链接的表。当我在youtube上做剪贴的时候。我们需要在转到其他链接之前添加延迟时间。如果我们不拖延的话。youtube将阻止我们的访问。我想为每个循环增加30秒的延迟。
所以我已经在app/console/commands/getyoutube.php文件中列出了

use App\Models\Youtube;
use App\Jobs\GetYoutubeView;
use Carbon\Carbon;
...

public function handle()
    {  

        $youtubes = Youtube::get();
        foreach ($youtubes as $youtube) { 
             GetYoutubeView::dispatch($youtube->link)->delay(Carbon::now()->addSeconds(30));
        }

    }

我试过这个密码。但仍然不能为每个循环增加30秒的延迟
其他人认为我添加了延迟代码 sleep(30); 在作业文件中。以下是我在jobs app/jobs/getyoutubelink.php中所做的工作

public function handle()
{ 
  sleep(30);
  // Scraping youtube total number of views code
}

但这是一样的。每个循环不会延迟30秒。正确的延迟代码是什么。
请帮忙。什么是正确的延迟代码在我的情况下。

cngwdvgl

cngwdvgl1#

当您调用dispatch时,作业将被调度。在那之后你再打给延期。您应该创建作业并在分派之前延迟作业。

$youtubes = Youtube::get();
$start = Carbon::now();

foreach ($youtubes as $youtube) { 
    $job = new GetYoutubeView($youtube->link);
    $job->delay($start->addSeconds(30));

    dispatch($job);
}

编辑
如果您以前调用多个日期,您应该只创建一个日期,并不断增加30秒。

相关问题