Метод onQueue
Метод onQueue применяется к объекту PendingDispatch,
который возвращается при вызове функции dispatch.
С помощью этого метода можно указать имя очереди для выполнения
задания. Первым и единственным параметром передаётся строка -
имя очереди. Если метод не вызван, задание будет помещено
в очередь по умолчанию, указанную в конфигурационном файле
queue.php.
Синтаксис
<?php
dispatch(new Job())->onQueue($queueName);
?>
Пример
Давайте создадим простое задание и отправим его
в очередь с именем 'high':
<?php
namespace AppJobs;
use IlluminateBusQueueable;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;
class SendEmailJob implements ShouldQueue
{
use InteractsWithQueue, Queueable, SerializesModels;
protected $userEmail;
public function __construct($userEmail)
{
$this->userEmail = $userEmail;
}
public function handle()
{
// отправка email
}
}
?>
<?php
namespace AppHttpControllers;
use AppJobsSendEmailJob;
class UserController extends Controller
{
public function sendEmail()
{
$email = 'user@example.com';
dispatch(new SendEmailJob($email))->onQueue('high');
}
}
?>
Пример
Отправим задание в очередь с именем 'low' для фоновой обработки:
<?php
namespace AppJobs;
use IlluminateBusQueueable;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;
class ProcessDataJob implements ShouldQueue
{
use InteractsWithQueue, Queueable, SerializesModels;
protected $data;
public function __construct($data)
{
$this->data = $data;
}
public function handle()
{
// обработка данных
}
}
?>
<?php
namespace AppConsoleCommands;
use AppJobsProcessDataJob;
class ProcessCommand extends Command
{
public function handle()
{
$data = ['a', 'b', 'c', 'd', 'e'];
dispatch(new ProcessDataJob($data))->onQueue('low');
echo "Job dispatched to low queue";
}
}
?>
Результат выполнения кода:
"Job dispatched to low queue"
Пример
Используем метод onQueue вместе с другими методами
настройки задания, такими как delay:
<?php
namespace AppJobs;
use IlluminateBusQueueable;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;
class ReportJob implements ShouldQueue
{
use InteractsWithQueue, Queueable, SerializesModels;
public function handle()
{
// генерация отчёта
}
}
?>
<?php
namespace AppHttpControllers;
use AppJobsReportJob;
class ReportController extends Controller
{
public function generate()
{
dispatch(new ReportJob())
->onQueue('reports')
->delay(now()->addMinutes(10));
}
}
?>
Смотрите также
-
метод
delay,
который устанавливает задержку перед выполнением задания -
метод
onConnection,
который указывает соединение для очереди -
функция
dispatch,
которая отправляет задание в очередь -
функция
dispatchSync,
которая выполняет задание синхронно