Laravel 作业内部作业的批处理或链

Laravel 作业内部作业的批处理或链,laravel,jobs,laravel-8,Laravel,Jobs,Laravel 8,我有一个作业A,它下载xml,然后调用另一个作业B,它将在数据库中创建数据。此作业B将在循环中调用,并且可以超过10000项。第一次尝试使用链式方法,但问题是,若有人以错误的顺序调用队列,那个么它将无法工作。然后尝试使用新拉威尔8的批次。将所有作业(超过10000个)收集到一个批次可能会导致内存不足异常。另一个问题是在最后调用作业C。此作业将更新某些凭据。这就是为什么作业A和B必须成功运行的原因。对于这种情况,有什么好主意吗?Laravel的作业批处理功能允许您轻松执行一批作业,然后在该批作业完

我有一个作业A,它下载xml,然后调用另一个作业B,它将在数据库中创建数据。此作业B将在循环中调用,并且可以超过10000项。第一次尝试使用链式方法,但问题是,若有人以错误的顺序调用队列,那个么它将无法工作。然后尝试使用新拉威尔8的批次。将所有作业(超过10000个)收集到一个批次可能会导致内存不足异常。另一个问题是在最后调用作业C。此作业将更新某些凭据。这就是为什么作业A和B必须成功运行的原因。对于这种情况,有什么好主意吗?

Laravel的作业批处理功能允许您轻松执行一批作业,然后在该批作业完成执行后执行一些操作

如果在批处理作业时内存不足,则说明您做错了。由于队列是一个接一个地执行的(如果以这种方式配置),因此即使它们是超过100k条记录,也应该没有问题。因此,请确保为每个项目粘贴一个作业,并执行该操作,这样就不会有问题

然后,你可以这样做

$chain = [
    new ProcessPodcast(Podcast::find(1)),
    new ProcessPodcast(Podcast::find(2)),
    new ProcessPodcast(Podcast::find(3)),
    new ProcessPodcast(Podcast::find(4)),
    new ProcessPodcast(Podcast::find(5)),
    ...
    // And so on for all your items.
    // This should be generated by a foreach with all his items.
];

Bus::batch($chain)->then(function (Batch $batch) {
    // All jobs completed successfully...
    // Uupdate some credentials...
})->catch(function (Batch $batch, Throwable $e) {
    // First batch job failure detected...
})->finally(function (Batch $batch) {
    // The batch has finished executing...
})->dispatch();

then
方法中调用新的、不同的清理作业是否有问题?理论上应该没有问题,但最合理的做法是将这些作业链接到同一个链中。好的,谢谢。我说的是最后一个作业,它要求在初始批处理期间在作业中设置数据。