Таким образом, я использую supervisor для работы с очередью Laravel Redis, и это плохо, когда он выполняется. Мой процесс вызывает событие с прослушивателем в очереди, который генерирует PDF и отправляет его по электронной почте.
Это слушатель в очереди. Пара замечаний:
- Это единственный слушатель, связанный с событием.
- Прямо перед тем, как запустить событие, я записываю в журнал «событие обжига». Это происходит КАЖДЫЙ ВРЕМЯ, когда событие запускается, но я смотрел журнал очереди и вижу только запись в очереди, сделанную в 10% случаев.
Пример записи рабочей очереди
# I can click "run report" button 10 times, and it will only work once
[2019-05-15 13:39:23][w7mcl9jU3b6W8h61KBnFwoJJw2R3FdNw] Processing: App\Listeners\Product\EmailPdfReport
Иногда он запускается несколько раз после перезапуска очереди, после чего он снова начинает шелушиться. Но иногда (как сейчас) я перезагружал очередь и все равно ничего не происходит.
Как отладить подобные проблемы в очереди?
прослушиватель в очереди
class EmailPdfReport implements ShouldQueue
{
/**
* Handle the event.
*
* @param object $event
* @return void
*/
public function handle($event)
{
$svc = new Reporting($event->product);
$data = $svc->run($event->user);
$pdf = \PDF::loadView('pdf.report', $data);
Mail::to($event->user->email)->send(new SendUserReport($pdf, $event->product));
}
}
EDIT
Пример из laravel.log (2 записи == 2 события были запущены)
[2019-05-15 14:21:43] production.DEBUG: Running Report: 424-Product 1
[2019-05-15 14:21:56] production.DEBUG: Running Report: 423-Product 1
Пример из worker.log (только 1 запись)
[2019-05-15 14:21:44][EyEqlfgbLH50S1R4QQvXJgfJxB6ejAMJ] Processing: App\Listeners\Product\EmailPdfReport