Laravel队列-等待工作完成后再调度下一批

时间:2018-11-27 19:46:09

标签: php laravel queue beanstalkd

我有一个同步过程,大约需要7个小时才能完成,我正在尝试将其转换为作业以加快速度。问题是我需要在分派step2作业之前确保step1中的所有作业都已完成。

我在Laravel中使用 Beanstalkd 作为队列驱动程序。我想到的一个可能的解决方案是运行一个while循环,不断检查队列是否为空,但这不能保证最后的几个工作都已完成。

简而言之,这就是我要做的事情:

//Step 1
ModelA::chunk(1000,function($rows){
  foreach($rows as $row){
      Dispatch(new JobA($row);
  }
}

//I Need To Make Sure STEP1 is Done Before I Proceed

//Step 2
ModelB::chunk(1000,function($rows){
  foreach($rows as $row){
      Dispatch(new JobB($row);
  }
}

我也乐于接受另一种方式。

1 个答案:

答案 0 :(得分:1)

可能 Laravel 8 Queue Batch 可以工作。 如果没有,试试这个包https://github.com/spatie/async