Laravel-понимание концепции работы


Laravel-понимание концепции работы

11.01.2020 11:04:48 Просмотров 94 Источник

Имея дело с очередью 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'); ?

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/59698201/laravel-understanding-job-concept#comment105551537_59698201
Я имел в виду, что это кажется фасадом, в то время как это не так.
https://stackoverflow.com/questions/59698201/laravel-understanding-job-concept#comment105551545_59698201
это называется вызовом статического метода, это просто PHP ... точно так же, как вы используете статические вызовы методов с вашими моделями, они не являются фасадами

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

Thiago Brauer

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 файл-это очередь писем, поэтому вам не нужно указывать очередь при запуске рабочей команды.

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

https://stackoverflow.com/questions/59698201/laravel-understanding-job-concept/59699766#comment105554715_59699766
Примечание используя laravel horizon вы можете указать какие очереди у вас есть в конфигурации :)
mrhn

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';
}
https://stackoverflow.com/questions/59698201/laravel-understanding-job-concept/59700534#comment105559232_59700534
'protected $queue = 'email'; ' - где он находится в файле Laravel doc ?
https://stackoverflow.com/questions/59698201/laravel-understanding-job-concept/59700534#comment105559553_59700534
Это взято из исходного кода, документация laravel-это помощь в работе, но иногда это хороший habbit, чтобы проверить его github.com/illuminate/bus/blob/. ... в качестве альтернативы вы можете вызвать onQueue ('email') в конструкторе задания.
https://stackoverflow.com/questions/59698201/laravel-understanding-job-concept/59700534#comment105559853_59700534
У упомянутого вами документа есть public $queue;вместо protected $queue
https://stackoverflow.com/questions/59698201/laravel-understanding-job-concept/59700534#comment105559951_59700534
Ах да написал это в "as i remembered" опять альтернативный вызов onQueue в конструкторе
Помочь в развитии проекта:
Закрыть X