Size: a a a

2020 December 08

ЕП

Евгений Перин ⭐️... in Laravel Pro
ну и может быть несколько разных пайплайнов. Они могут юзать совершенно разные таски в разной последовательности и параллельности. Один и тот же таск может юзаться в разных пайплайнах с разными аргументами
источник

А

Антон in Laravel Pro
Karl
Ребят, а есть же способ из AppServiceProvider узнать имя контроллера, который сейчас должен запуститься?
Нет
источник

ЕП

Евгений Перин ⭐️... in Laravel Pro
// По каждому пайплайну запускаем батчи с джобами
       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();
       }
источник

А

Антон in Laravel Pro
Karl
Ребят, а есть же способ из AppServiceProvider узнать имя контроллера, который сейчас должен запуститься?
Провайдеры запускаются раньше обработки запроса. Можешь подписаться на эвент RouteMatched.
источник

ЕП

Евгений Перин ⭐️... in Laravel Pro
вот щас такой монстр есть, который группирует таски в батчи и кидайет в чейн. Но мне не понятно как я могу отслеживать выполнение всех батчей внутри чейна, чтобы менять стейт PipelineExecution
источник

K

Karl in Laravel Pro
спасибо, пойду погуглю
источник

ЕП

Евгений Перин ⭐️... in Laravel Pro
new RunTask($taskExecution); тут вызывается джоба которая уже исполняет конкретный пхп класс указанный в таске. И там же есть метод failed в котором могу отслеживать если таск фейлится и менять стейт
источник

A

Adel in Laravel Pro
ох этот ужас со sleep()...
источник

ЕП

Евгений Перин ⭐️... in Laravel Pro
да, пока так придумали только
источник

A

Adel in Laravel Pro
ты вроде делаешь асинхронную задачу, но делаешь ее синхронно
источник

ЕП

Евгений Перин ⭐️... in Laravel Pro
нам нельзя запускать следующий батч пока не завершится текущий
источник

ЕП

Евгений Перин ⭐️... in Laravel Pro
ну как то так и есть) поэтому интересуюсь, может подскажете тут)
источник

A

Adel in Laravel Pro
Евгений Перин ⭐️
ну как то так и есть) поэтому интересуюсь, может подскажете тут)
что будет если скрипт этот умрёт случайно?
источник

ЕП

Евгений Перин ⭐️... in Laravel Pro
апокалипсис видимо
источник

ЕП

Евгений Перин ⭐️... in Laravel Pro
пока не знаю
источник

A

Adel in Laravel Pro
пайплайны и таски в базе же лежат?
источник

ЕП

Евгений Перин ⭐️... in Laravel Pro
да
источник

A

Adel in Laravel Pro
но они такие.. что завтра там, или через неделю их же будем опять запускать, да?
источник

ЕП

Евгений Перин ⭐️... in Laravel Pro
по крону можно, или вручную
источник

ЕП

Евгений Перин ⭐️... in Laravel Pro
источник