Слушатель очереди работает случайным образом (с супервизором) - PullRequest
0 голосов
/ 15 мая 2019

Таким образом, я использую 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
...