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

Класс Bus

Класс Bus является фасадом Laravel для работы с диспетчером очереди. Он предоставляет методы для отправки задач в очередь, создания цепочек заданий и пакетной обработки. Основное назначение класса - унифицированный интерфейс для диспетчеризации заданий через шину очереди. Первым параметром методы класса принимают экземпляр задания или массив заданий, вторым - конфигурационные параметры.

Синтаксис

<?php Bus::dispatch($job); Bus::dispatchSync($job); Bus::chain($jobs); Bus::batch($jobs); ?>

Пример

Давайте отправим задание в очередь с использованием фасада Bus:

<?php namespace App\Jobs; use Illuminate\Contracts\Queue\ShouldQueue; class SendWelcomeEmail implements ShouldQueue { protected $userId; public function __construct($userId) { $this->userId = $userId; } public function handle() { // Send welcome email logic return "Welcome email sent to user {$this->userId}"; } } ?>
<?php namespace App\Http\Controllers; use App\Jobs\SendWelcomeEmail; use Illuminate\Support\Facades\Bus; class UserController extends Controller { public function store() { $userId = 1; $job = new SendWelcomeEmail($userId); Bus::dispatch($job); return response()->json(['message' => 'Job dispatched']); } } ?>

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

"Job dispatched"

Пример

Давайте создадим цепочку последовательных заданий с помощью метода chain:

<?php namespace App\Jobs; use Illuminate\Contracts\Queue\ShouldQueue; class ProcessOrder implements ShouldQueue { protected $orderId; public function __construct($orderId) { $this->orderId = $orderId; } public function handle() { return "Order {$this->orderId} processed"; } } ?>
<?php namespace App\Jobs; use Illuminate\Contracts\Queue\ShouldQueue; class SendOrderConfirmation implements ShouldQueue { protected $orderId; public function __construct($orderId) { $this->orderId = $orderId; } public function handle() { return "Order {$this->orderId} confirmation sent"; } } ?>
<?php namespace App\Http\Controllers; use App\Jobs\ProcessOrder; use App\Jobs\SendOrderConfirmation; use Illuminate\Support\Facades\Bus; class OrderController extends Controller { public function process() { $orderId = 123; $chain = Bus::chain([ new ProcessOrder($orderId), new SendOrderConfirmation($orderId) ])->dispatch(); return response()->json(['message' => 'Chain dispatched']); } } ?>

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

"Chain dispatched"

Пример

Давайте создадим пакет заданий с помощью метода batch и добавим обратные вызовы для отслеживания выполнения:

<?php namespace App\Jobs; use Illuminate\Contracts\Queue\ShouldQueue; class ProcessReport implements ShouldQueue { protected $reportId; public function __construct($reportId) { $this->reportId = $reportId; } public function handle() { // Process report logic return "Report {$this->reportId} processed"; } } ?>
<?php namespace App\Http\Controllers; use App\Jobs\ProcessReport; use Illuminate\Support\Facades\Bus; class ReportController extends Controller { public function generate() { $batch = Bus::batch([ new ProcessReport(1), new ProcessReport(2), new ProcessReport(3) ])->then(function ($batch) { // All jobs completed successfully return "All reports processed"; })->catch(function ($batch, $exception) { // First job failure detected return "Batch failed: " . $exception->getMessage(); })->finally(function ($batch) { // Always executed after batch completion return "Batch finished"; })->dispatch(); return response()->json(['message' => 'Batch dispatched']); } } ?>

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

"Batch dispatched"

Пример

Давайте выполним задание синхронно с помощью метода dispatchSync:

<?php namespace App\Jobs; use Illuminate\Contracts\Queue\ShouldQueue; class UpdateCache implements ShouldQueue { protected $key; protected $value; public function __construct($key, $value) { $this->key = $key; $this->value = $value; } public function handle() { // Update cache logic return "Cache updated for key {$this->key}"; } } ?>
<?php namespace App\Http\Controllers; use App\Jobs\UpdateCache; use Illuminate\Support\Facades\Bus; class CacheController extends Controller { public function update() { $job = new UpdateCache('user_data', 'new_value'); $res = Bus::dispatchSync($job); return response()->json(['result' => $res]); } } ?>

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

"Cache updated for key user_data"

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

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