ЕП
Size: a a a
ЕП
А
ЕП
// По каждому пайплайну запускаем батчи с джобами
foreach ($pipelines as $pipeline) {
// Создаем запуск пайплайна
$pipelineExecution = $pipeline->runExecution();
// Группируем таски по sort
$tasksGroups = $pipeline->tasks->sortBy('sort')->groupBy('sort');
// На каждую группу тасков создаем батч
$batches = [];
foreach ($tasksGroups as $sortNumber => $sortTasks) {
$batches[] = static function () use ($pipelineExecution, $sortTasks) {
$jobs = [];
// В батч складываем джобы по запуску тасков
foreach ($sortTasks as $task) {
// Создаем запуск таска
$taskExecution = $task->runExecution($pipelineExecution);
$jobs[] = new RunTask($taskExecution);
}
// Диспатчим батч
$batch = Bus::batch($jobs)
->catch(static function (Batch $batch, Throwable $e) {
//
})
->then(static function (Batch $batch) {
// $batch->
})
->dispatch();
// Ждем завершения всех джобов в батче, для запуска слеующего батча
while (!$batch->fresh()->finished()) {
sleep(1);
}
};
}
// Все батчи запускаем в цепочке последовательно
Bus::chain($batches)
->catch(static function (Throwable $e) {
info('failed_2');
})
->dispatch();
}
А
RouteMatched
.ЕП
K
ЕП
new RunTask($taskExecution);
тут вызывается джоба которая уже исполняет конкретный пхп класс указанный в таске. И там же есть метод failed в котором могу отслеживать если таск фейлится и менять стейтA
ЕП
A
ЕП
ЕП
A
ЕП
ЕП
A
ЕП
A
ЕП