Laravel-понимание концепции работы
Имея дело с очередью Laravel, я понимаю, что job-это задача, которая хранится в очереди и должна выполняться одна за другой.
Доктор Ларавель говорит: :
Другими словами, если вы отправляете задание без явного определения в какую очередь он должен быть отправлен, задание будет размещено на очередь, определенная в атрибуте queue соединения конфигурация:
// Это задание отправляется в очередь по умолчанию...
Job::dispatch();
// Это задание отправляется в очередь "электронные письма"...
Job::dispatch()->onQueue('emails');
В другом месте на той же странице doc я нахожу:
ProcessPodcast::dispatch($podcast);
ProcessPodcast
-это задание, которое отправляется с аргументом, т. е. $podcast
. Но нигде в doc я не нашел синтаксиса Job::
кроме упомянутых 2 строк.
Q1) Итак, где и как использовать синтаксис Job::
?
Каждый элемент в массиве connections
внутри config/queue.php
имеет 'queue' => 'default',
.
В2) причем тут emails
приходят из очереди в Job::dispatch()->onQueue('emails');
?





Ответы - Laravel-понимание концепции работы / Laravel - understanding Job concept

12.01.2020 02:56:16
A1: как сказал лагбокс, Job-это общее имя для любого задания, которое вы создадите и отправите.
A2: очереди не нужно нигде определять, вы просто говорите Laravel, в какую очередь вы хотите отправить задание, и все. Например, если вы вызовете Job::dispatch()->onQueue('emails');
для подключения к базе данных, в таблице queue jobs будет создана новая строка (по умолчанию имя таблицы-jobs
), а queue
будет заполнена emails
. После этого эта работа будет выполнена только в том случае, если вы запустите рабочий, задающий очередь писем: php artisan queue:work --queue=emails
. Если очередь по умолчанию для подключения к базе данных указана в config / queue.php файл-это очередь писем, поэтому вам не нужно указывать очередь при запуске рабочей команды.
Если у вас много очередей, вы можете создать один процесс для каждого из них, чтобы определить, как вы хотите запустить каждую очередь заданий.


12.01.2020 05:48:52
Итак, где и как использовать синтаксис задания::?
Вы можете использовать его в любом месте, а также использовать вспомогательную dispatch()
или реализовать функцию trait DispatchesJobs
и вызвать $this->dispatch()
. Все эти звонки будут работать, создавайте свой рабочий объект и отправляйте его.
Причем тут письма приходят из очереди в работу: диспетчер()->onQueue('сообщения'); ?
Очереди зависят от того, какой драйвер вы запускаете, если вы запускаете horizon, вам нужно будет изменить конфигурацию (и все равно запустить системный процесс). Если вы используете другие драйверы очередей ,вам придется создать очереди на сервере, который должен запустить их php artisan queue:work redis --queue=emails
.
Какая из этих очередей также отправляется заданию, зависит от того, какая очередь указана в вызове onQueue (), для обеспечения ремонтопригодности и безопасности заданий, выполняемых в правильной очереди, я предпочитаю устанавливать ее в задании.
class job implements ShouldQueue {
public $queue = 'emails';
}



