Когда Job
является dispatch()
'ed, он настроен для обработки процессом, настроенным в config/queue.php
:
return [
'default' => env('QUEUE_CONNECTION', 'sync'),
'connections' => [
'sync' => [...],
'database' => [...],
'beanstalkd' => [...],
'sqs' => [...],
'redis' => [...]
]
];
По умолчанию это установлено на sync()
, и задания обрабатываются автоматически при запуске. Во многих производственных средах для этого параметра установлено значение database
, и используется таблица jobs
(см. https://laravel.com/docs/7.x/queues#driver -prerequisites раздел базы данных).
Для обработки отправленного Job
в очередь вам понадобится слушатель:
php artisan queue:work
Это фоновый процесс, который автоматически прослушивает dispatch()
и, используя таблицу jobs
, обрабатывает Job
и это 'payload'
. Доступно множество вариантов конфигурации, но все они работают одинаково.
Наконец, если вы хотите отложить обработку Job
, используя параметр ->delay()
:
dispatch(new ExampleJob(...))->delay(now()->addMinutes(10));
Это установит столбец jobs.available_at
на соответствующую отметку времени и отложит выполнение до тех пор, пока не будет достигнуто это время.