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

Класс PendingDispatch

Класс PendingDispatch возвращается методом dispatch, вызванным на объекте задания, и позволяет выполнить цепочку настроек перед фактической отправкой задания в очередь. Этот класс используется для добавления дополнительных параметров, таких как задержка выполнения, указание очереди, соединения, а также управление поведением задания в рамках транзакций базы данных.

Синтаксис

<?php $pendingDispatch = new PendingDispatch($job); $pendingDispatch->delay($seconds) ->onQueue($queueName) ->onConnection($connectionName) ->afterCommit() ->allOnQueue($queueName) ->allOnConnection($connectionName); ?>

Пример

Создадим простое задание для отправки уведомлений и отправим его в очередь с задержкой в 30 секунд:

<?php namespace AppJobs; use IlluminateBusQueueable; use IlluminateContractsQueueShouldQueue; use IlluminateFoundationBusDispatchable; use IlluminateQueueInteractsWithQueue; use IlluminateQueueSerializesModels; class SendNotificationJob implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; protected $userId; public function __construct($userId) { $this->userId = $userId; } public function handle() { echo "Sending notification to user: " . $this->userId; } } ?>
<?php namespace AppHttpControllers; use AppJobsSendNotificationJob; class NotificationController extends Controller { public function send($userId) { $job = new SendNotificationJob($userId); $pendingDispatch = $job->dispatch(); $pendingDispatch->delay(30); echo "Job dispatched with delay"; } } ?>

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

"Job dispatched with delay"

Пример

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

<?php namespace AppHttpControllers; use AppJobsProcessOrderJob; class OrderController extends Controller { public function process($orderId) { $job = new ProcessOrderJob($orderId); $pendingDispatch = $job->dispatch() ->onQueue('high') ->onConnection('redis') ->delay(60) ->afterCommit(); return response()->json(['status' => 'processing']); } } ?>

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

"{"status":"processing"}"

Пример

Используем метод allOnQueue и allOnConnection для применения настроек ко всем заданиям в цепочке:

<?php namespace AppHttpControllers; use AppJobsFirstJob; use AppJobsSecondJob; use AppJobsThirdJob; use IlluminateSupportFacadesBus; class BatchController extends Controller { public function runBatch() { $batch = Bus::batch([ new FirstJob(), new SecondJob(), new ThirdJob() ])->dispatch(); $pendingDispatch = $batch->jobs[0]->dispatch() ->allOnQueue('low') ->allOnConnection('database'); echo "Batch dispatched with all jobs on low queue"; } } ?>

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

"Batch dispatched with all jobs on low queue"

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

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