Laravel Queue засыпают, когда очередь пуста - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть функция контроллера, которая отправляет job.Когда этот job обработан, в конце он снова отправляет тот же job (с разными аргументами).Всего существует 5 одинаковых заданий.

Queue driver: database

Проблема в том, что я записываю продолжительность от create() до handle().Первое задание, отправленное контроллером, заняло 1700 мс, в то время как остальные задания, отправленные самими заданиями, заняли всего 40 мс.

Queue driver: sync

Когда я переключился на использование sync драйвера очереди, всезадания работали с молниеносной скоростью.

Выводы:

Первое задание очереди заняло много времени с create() до handle().До этого очередь была пуста.Это может быть проблема с драйвером очереди.

Почему и как исправить, пожалуйста?спасибо !!

ОБНОВЛЕНИЕ:

Добавлен TestJob, который отправляется при обработке задания.Это означало, что очередь всегда обрабатывала или ожидала обработки TestJob.

Повторяя мои исходные задания, все они занимали всего <70 мс с <code>created() до handle() выполнено.

Вывод:

Я почти уверен, что это проблема с драйвером очереди.Похоже, рабочий засыпает, когда очередь пуста.Кто-нибудь знает исправление, пожалуйста?

1 Ответ

0 голосов
/ 01 декабря 2018

Я публикую свой ответ здесь, надеюсь, будет полезен кому-то еще в Интернете.

Ссылка

https://divinglaravel.com/queue-system/workers

Ответ

После повсеместного размещения echo и echo debug_backtrace()[1]['function']; было обнаружено, что значение DEFAULT VALUE для сна было, когда очередь пуста, внутри Illuminate\Queue\Console\WorkCommand

Защищенный $ signature = 'queue: work {- sleep = 3: Количество секунд, в течение которых нужно спать, когда работа недоступна}

Решение

, поэтомуРешение - упомянуть sleep в консоли:

php artisan queue:work --sleep=0

Спасибо за чтение.

...