Laravel - понимание концепции работы - PullRequest
1 голос
/ 11 января 2020

Имея дело с очередью Laravel, я понимаю, что задание - это задание, которое хранится в очереди и выполняется одно за другим.

Laravel do c говорит:

Другими словами, если вы отправляете задание без явного определения, в какую очередь оно должно быть отправлено, задание будет помещено в очередь, определенную в атрибуте очереди конфигурации соединения:

// Это задание отправляется в очередь по умолчанию ...

Job::dispatch();

// Это задание отправляется в очередь "электронных писем" ...

Job::dispatch()->onQueue('emails');

В другом месте на той же странице do c я нахожу:

 ProcessPodcast::dispatch($podcast);

ProcessPodcast - это задание, которое отправляется с аргументом, например $podcast. Но нигде в do c я не нашел синтаксис Job::, за исключением упомянутых 2 строк.

Q1) Так где и как использовать синтаксис Job::?

Каждый элемент в массиве connections внутри config/queue.php имеет 'queue' => 'default',.

Q2) Откуда берется очередь emails в Job::dispatch()->onQueue('emails');?

Ответы [ 2 ]

1 голос
/ 12 января 2020

A1: Как и lagbox , "Job" - это обобщенное c имя для любого задания, которое вы создадите и отправите.

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

Если у вас много очередей , вы можете создать один процесс для каждого, чтобы вы могли определить, как вы хотите запускать каждую очередь заданий.

0 голосов
/ 12 января 2020

Так где и как использовать синтаксис Job ::?

Вы можете использовать его где угодно, а также использовать помощник dispatch() или реализовать черту DispatchesJobs и позвоните $this->dispatch(). Все эти вызовы сработают, создайте свой объект задания и отправьте его.

Откуда берется очередь электронных писем в Job :: dispatch () -> onQueue ('emails'); ?

Очереди зависят от того, какой драйвер вы используете, если вы запустите horizon, вам понадобится изменить конфигурацию (и все же запустить системный процесс). Если вы используете другие драйверы очереди, вам нужно будет создать очереди на сервере, который должен их запускать php artisan queue:work redis --queue=emails.

Какая из этих очередей отправляется и задание, зависит от того, какая очередь указана в Вызов onQueue () для удобства обслуживания и обеспечения безопасности заданий выполняется в правильной очереди. Я предпочитаю устанавливать это в задании.

class job implements ShouldQueue {
    public $queue = 'emails';
}
...