【发布时间】:2023-01-25 20:32:57
【问题描述】:
我有一系列批处理的链式作业,在这些链中我需要能够批处理其他作业。
假设我有 3 个客户
对于每个客户,我需要
- 将他们的详细信息与外部 API 同步
- 创建 0 个或多个新案例并单独同步它们
- 更新 0 个或多个现有案例并单独同步它们
我需要包装批次来跟踪这一切何时完成。
我目前有以下结构:
$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 都应该分派他们自己的一批作业,因为每个案例都需要单独同步
问题当然是创建/更新作业在分派时在链中“完成”,而不是在所有内部作业完成时。因此,
BatchA作业在尚未同步任何案例时将被标记为已完成。
【问题讨论】:
标签: laravel laravel-8 laravel-queue