【发布时间】:2018-11-27 19:46:09
【问题描述】:
我有一个大约需要 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);
}
}
我也愿意以不同的方式做到这一点。
【问题讨论】:
-
也许 Laravel 的 Job chaining 有用在这种情况下有用吗?
-
@RamyHerrira 我不知道我怎么能把它锁起来。请注意,我希望 for 循环的元素作为作业运行
标签: php laravel queue beanstalkd