Функция dispatch
Функция dispatch применяется для отправки заданий (jobs) в очередь Laravel.
Она принимает экземпляр класса задания и возвращает экземпляр класса PendingDispatch,
который позволяет дополнительно настраивать параметры отправки, такие как задержка,
очередь или соединение. Функция автоматически определяет, должна ли задача быть отправлена
в очередь синхронно или асинхронно, в зависимости от того, реализует ли класс задания
интерфейс ShouldQueue.
Синтаксис
<?php
dispatch($job);
?>
Пример
Давайте отправим простое задание в очередь:
<?php
namespace AppJobs;
use IlluminateBusQueueable;
use IlluminateQueueSerializesModels;
use IlluminateQueueInteractsWithQueue;
use IlluminateContractsQueueShouldQueue;
use IlluminateFoundationBusDispatchable;
class SendEmailJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $email;
public function __construct($email)
{
$this->email = $email;
}
public function handle()
{
// Отправка письма
echo "Sending email to: " . $this->email;
}
}
?>
<?php
namespace AppHttpControllers;
use AppJobsSendEmailJob;
use IlluminateHttpRequest;
class UserController extends Controller
{
public function sendEmail(Request $request)
{
$email = $request->input('email');
dispatch(new SendEmailJob($email));
return response()->json(['message' => 'Email sent to queue']);
}
}
?>
Пример
Давайте отправим задание с задержкой в 10 минут:
<?php
namespace AppHttpControllers;
use AppJobsProcessOrderJob;
use IlluminateHttpRequest;
class OrderController extends Controller
{
public function create(Request $request)
{
$orderId = $request->input('order_id');
dispatch(new ProcessOrderJob($orderId))->delay(now()->addMinutes(10));
return response()->json(['message' => 'Order processing delayed']);
}
}
?>
Пример
Давайте отправим задание в определённую очередь:
<?php
namespace AppHttpControllers;
use AppJobsSendNotificationJob;
use IlluminateHttpRequest;
class NotificationController extends Controller
{
public function sendNotification(Request $request)
{
$userId = $request->input('user_id');
dispatch(new SendNotificationJob($userId))->onQueue('high-priority');
return response()->json(['message' => 'Notification sent to high priority queue']);
}
}
?>
Пример
Давайте отправим задание с указанием соединения и очереди:
<?php
namespace AppHttpControllers;
use AppJobsGenerateReportJob;
use IlluminateHttpRequest;
class ReportController extends Controller
{
public function generateReport(Request $request)
{
$reportId = $request->input('report_id');
dispatch(new GenerateReportJob($reportId))
->onConnection('redis')
->onQueue('reports');
return response()->json(['message' => 'Report generation queued']);
}
}
?>
Смотрите также
-
класс
PendingDispatch,
который возвращается функцией dispatch и позволяет настраивать отправку -
класс
ShouldQueue,
который указывает, что задание должно быть отправлено в очередь -
метод
dispatch_sync,
который выполняет задание синхронно, не помещая его в очередь -
метод
handle,
который содержит логику выполнения задания