Салют!
Задавал уже этот вопрос, но так и не смог с ним разобраться.
Задача: после постановки job'a в очередь(queue) записать инфу о нем в БД.
Как это сделать хз. Прошу помощи.
В конструкторе джоба нет доступа к $this->job (он пустой), а метод handle()
срабатывает непосредственно при запуске задачи. Там this->job есть.
Ставлю job в очередь следующим образом:
use Illuminate\Foundation\Bus\DispatchesJobs;
$job = (new MyJob($data))
->onQueue('myqueue')
->delay(now()->addMinutes(1));
$job_id = $this->dispatch($job);
Сразу после выполения этого кода в БД появляется запись в таблице job.
Мне нужно каким-то образом отследить этот момент. И получить информацию по джобу.
Мне посоветовали использовать события. У ларавеля есть т.н. Job Events.
Если в файле
app/Providers/EventServiceProvider.php
в методе boot() вызвать следующий код, можно плучить доступ к job->payload
Event::listen(JobProcessing::class, function ($event) {
$payload = $event->job->payload();
var_dump($payload);
});
У лараверя есть следующие события для работы с очередями
JobProcessing
JobProcessed
JobFailed
JobExceptionOccurred
Looping
WorkerStopping
Проблема заключается в том, что нет события "постановки job'a в очередь (queue)".
Буду благодарен если натолкнете на мысль.. Уже запарился придумывать костыли :)
"Мне нужно каким-то образом отследить этот момент. " так если есть $job_id, то событие уже поставленно в очередь, нет? обычный слушатель сделать не проще?