Класс Queue
Класс Queue в Laravel предоставляет унифицированный интерфейс для работы с различными драйверами очередей. Он позволяет отправлять задания в очередь, управлять их выполнением и отслеживать состояние очередей. Класс доступен через фасад Queue или через контейнер зависимостей. Основные методы включают отправку заданий, установку задержек, проверку размера очереди и управление соединениями.
Синтаксис
<?php
use Illuminate\Support\Facades\Queue;
Queue::push($job);
Queue::later($delay, $job);
Queue::size($queue);
Queue::connection($name);
?>
Пример
Давайте отправим простое задание в очередь по умолчанию:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Queue;
use App\Jobs\SendEmailJob;
class QueueController extends Controller
{
public function sendEmail()
{
$job = new SendEmailJob('user@example.com');
Queue::push($job);
return response()->json(['message' => 'Job dispatched']);
}
}
?>
Результат выполнения кода:
"Job dispatched"
Пример
Отправим задание с задержкой в 10 минут:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Queue;
use App\Jobs\SendEmailJob;
use Carbon\Carbon;
class QueueController extends Controller
{
public function delayedEmail()
{
$job = new SendEmailJob('user@example.com');
$delay = Carbon::now()->addMinutes(10);
Queue::later($delay, $job);
return response()->json(['message' => 'Job scheduled']);
}
}
?>
Результат выполнения кода:
"Job scheduled"
Пример
Проверим размер очереди перед отправкой:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Queue;
use App\Jobs\ProcessDataJob;
class QueueController extends Controller
{
public function processWithCheck()
{
$queue = 'processing';
$size = Queue::size($queue);
if ($size < 100) {
$job = new ProcessDataJob(['user' => 'test']);
Queue::onQueue($queue)->push($job);
return response()->json(['message' => 'Job added', 'size' => $size]);
}
return response()->json(['message' => 'Queue is full', 'size' => $size]);
}
}
?>
Результат выполнения кода:
"Job added"
Пример
Отправим задание на конкретное соединение и очередь:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Queue;
use App\Jobs\ReportJob;
class QueueController extends Controller
{
public function customConnection()
{
$job = new ReportJob(['type' => 'daily']);
Queue::connection('redis')
->onQueue('reports')
->push($job);
return response()->json(['message' => 'Job dispatched to custom queue']);
}
}
?>
Результат выполнения кода:
"Job dispatched to custom queue"
Смотрите также
-
метод
dispatch,
который отправляет задание в очередь -
класс
PendingDispatch,
который управляет отправленным заданием -
метод
push,
который добавляет задание в очередь -
метод
later,
который добавляет задание с задержкой