laravel 在批处理作业链中运行嵌套批处理

ttp71kqs  于 2023-01-27  发布在  其他
关注(0)|答案(1)|浏览(175)

我有一系列批量的链式作业,在这些链中,我需要能够批量处理其他作业。
假设我有3个客户端
对于每个客户端,我需要
1.将其详细信息与外部API同步
1.创建0个或多个新案例并单独同步它们
1.更新0个或多个现有案例并分别同步
我需要 Package 材料来记录这些东西什么时候完成。
我目前的结构如下:

$jobs = $clients->map(fn(Client $client) => [
   new SyncClientJob(...),
   new CreateMultipleCasesJob(...),
   new UpdateMultipleCasesJob(...)
]);

Bus::batch($jobs)->name('BatchA')->etc()

在CreateCasesJob中,执行沿着于以下内容的操作

public function handle()
{
   $jobs = $collection_of_new_cases->map(fn(Case $case) => new CreateSingleCaseJob($case));
   Bus::batch($jobs)->dispatch();
}

CreateCasesJob和UpdateCasesJob都应该分派自己的作业批,因为每个案例都需要单独同步
当然,问题在于,Create/Update作业在被分派时在链中是“完成”的,而不是在其所有内部作业都完成时,因此BatchA作业将在尚未同步任何案例时被标记为完成。

7fyelxc5

7fyelxc51#

我通过让每批作业在-〉finally()回调函数中分派一个事件来解决这个问题,然后该事件的侦听器将构建并启动下一批作业。

相关问题