РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1378 of 1392 menu

Метод chain

Метод chain класса Bus используется для построения цепочки заданий, которые выполняются последовательно. Каждое следующее задание в цепочке начинает выполняться только после успешного завершения предыдущего. Первым параметром метод принимает массив заданий, которые будут выполнены последовательно.

Синтаксис

<?php use IlluminateSupportFacadesBus; Bus::chain($jobs)->dispatch(); ?>

Пример

Давайте создадим простую цепочку из трёх заданий, которые будут выполняться последовательно:

<?php namespace AppJobs; use IlluminateContractsQueueShouldQueue; class FirstJob implements ShouldQueue { public function handle() { echo "First job executed\n"; } } ?>
<?php namespace AppJobs; use IlluminateContractsQueueShouldQueue; class SecondJob implements ShouldQueue { public function handle() { echo "Second job executed\n"; } } ?>
<?php namespace AppJobs; use IlluminateContractsQueueShouldQueue; class ThirdJob implements ShouldQueue { public function handle() { echo "Third job executed\n"; } } ?>
<?php namespace AppHttpControllers; use IlluminateSupportFacadesBus; use AppJobsFirstJob; use AppJobsSecondJob; use AppJobsThirdJob; class JobController extends Controller { public function index() { Bus::chain([ new FirstJob(), new SecondJob(), new ThirdJob() ])->dispatch(); return response()->json(['message' => 'Chain dispatched']); } } ?>

Результат выполнения кода в логе очереди:

"First job executed" "Second job executed" "Third job executed"

Пример

Использование цепочки с передачей данных между заданиями через свойства класса:

<?php namespace AppJobs; use IlluminateContractsQueueShouldQueue; class ProcessJob implements ShouldQueue { public $data; public function __construct($data) { $this->data = $data; } public function handle() { $this->data = strtoupper($this->data); echo "Processed: " . $this->data . "\n"; } } ?>
<?php namespace AppJobs; use IlluminateContractsQueueShouldQueue; class SaveJob implements ShouldQueue { public $data; public function __construct($data) { $this->data = $data; } public function handle() { // Simulate saving to database echo "Saved: " . $this->data . "\n"; } } ?>
<?php namespace AppHttpControllers; use IlluminateSupportFacadesBus; use AppJobsProcessJob; use AppJobsSaveJob; class JobController extends Controller { public function process() { $initialData = 'abcde'; Bus::chain([ new ProcessJob($initialData), new SaveJob($initialData) ])->dispatch(); return response()->json(['message' => 'Chain processed']); } } ?>

Результат выполнения кода в логе очереди:

"Processed: ABCDE" "Saved: ABCDE"

Пример

Цепочка с использованием метода catch для обработки ошибок:

<?php namespace AppJobs; use IlluminateContractsQueueShouldQueue; use Exception; class FailingJob implements ShouldQueue { public $id; public function __construct($id) { $this->id = $id; } public function handle() { if ($this->id % 2 === 0) { throw new Exception("Failed job with ID: " . $this->id); } echo "Job " . $this->id . " executed\n"; } } ?>
<?php namespace AppJobs; use IlluminateContractsQueueShouldQueue; class BackupJob implements ShouldQueue { public function handle() { echo "Backup job executed\n"; } } ?>
<?php namespace AppHttpControllers; use IlluminateSupportFacadesBus; use AppJobsFailingJob; use AppJobsBackupJob; use Exception; class JobController extends Controller { public function handle() { Bus::chain([ new FailingJob(1), new FailingJob(2), new BackupJob() ])->catch(function (Exception $e) { echo "Caught exception: " . $e->getMessage() . "\n"; })->dispatch(); return response()->json(['message' => 'Chain with catch dispatched']); } } ?>

Результат выполнения кода в логе очереди:

"Job 1 executed" "Caught exception: Failed job with ID: 2"

Смотрите также

  • метод batch,
    который позволяет выполнять задания пакетами
  • метод dispatch,
    который отправляет задание в очередь
  • класс PendingDispatch,
    который возвращается при отправке задания
  • класс Bus,
    который предоставляет методы для работы с очередями
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить