如果laravel队列中的一个作业失败了会发生什么?

gj3fmq9x  于 2023-03-31  发布在  其他
关注(0)|答案(2)|浏览(124)

我想批量处理一些排队的作业,我有一个小问题。
laravel在一个任务失败时,会尝试处理下一个任务还是关闭整个任务批?
https://laravel.com/docs/8.x/queues#batch-failures

$batch = Bus::batch([
    new FirstJob(),
    new SecondJob(),
    new ThirdJob(),
    new FourthJob(),
    new LastJob(),
])->then(function (Batch $batch) {
    // All jobs completed successfully...
})->catch(function (Batch $batch, Throwable $e) {
    // First batch job failure detected...
})->finally(function (Batch $batch) {
    // The batch has finished executing...
})->dispatch();

例如,如果FourthJob()即将失败,批处理是否将尝试LastJob()

wixjitnu

wixjitnu1#

批处理执行可以根据您是否将batch设置为接受failuresnot来继续尝试lastJob()

dtcbnfnu

dtcbnfnu2#

默认情况下,LastJob()不会执行。当一个批处理中的作业失败时,Laravel会自动将该批处理标记为“cancelled”。如果你愿意,你可以禁用此行为,这样作业失败时就不会自动将该批处理标记为“cancelled”。这可以通过在分派批处理时调用allowFailures方法来实现:

$batch = Bus::batch([
    // ...
])->then(function (Batch $batch) {
    // All jobs completed successfully...
})->allowFailures()->dispatch();

相关问题