Задание очереди Laravel 5 зависает

Я реализую команду, которая будет обрабатывать загруженные файлы.

Файлы могут содержать до 300 МБ данных, поэтому задание нужно поставить в очередь, и я также ожидаю, что для его завершения потребуется время.

Моя проблема в том, что когда я запускаю php artisan queue:listen, он получает задание из очереди, начинает его нормально обрабатывать, но примерно через 20 секунд оно зависает. Задание не запускает никаких исключений и не продолжается, поэтому оно не удаляется из очереди.

Я использую драйвер database. Что-то здесь не хватает?


person Javier Enríquez    schedule 01.06.2015    source источник
comment
Не видя кода, найти проблему сложно.   -  person Sulthan Allaudeen    schedule 01.06.2015


Ответы (2)


php artisan queue:listen не выводит ошибки для пользователя. Запустите php artisan queue:work, и он выдаст ошибки. Эта команда запустит только один процесс в очереди. Поэтому вам нужно убедиться, что следующий процесс - это именно тот процесс, который вы хотите отлаживать.

person krain143    schedule 01.06.2015
comment
Тоже зависает. Нашел свою ошибку. Это какая-то ошибка. fgetcsv после прочтения большого количества строк возвращает ноль вместо FALSE. Так что я был в бесконечном цикле. - person Javier Enríquez; 03.06.2015
comment
Сколько строк? Возможно, вы исчерпали лимит памяти. Попробуйте добавить этот оператор ini_set('memory_limit', -1); поверх кода. Это снимет ограничение памяти вашего php. - person krain143; 03.06.2015
comment
7000 строк. Это очень странно, потому что я использовал SplFileInfo. Таким образом, где-то он вернул null, когда я ожидал false ошибки или конца файла. Поэтому я изменил его, чтобы использовать обычный fopen способ. Таким образом я фактически читаю весь файл и получаю false в конце файла. Проблема в том, что читаются не все строки. Около 10% не читаются. Очень странно. Думаю открыть еще один вопрос. - person Javier Enríquez; 03.06.2015

Возможно, он не зависает, но кажется, что он завис, когда вы видите, что в интерфейсе командной строки ничего не происходит после запуска команды php artisan queue: work или php artisan queue: listen.

Как и в моем случае,

// Выполнение очередей Laravel по именам очередей в интерфейсе командной строки - ›

Я использовал команду php artisan queue: work
, которая не выполняла мои задания в очереди в таблице заданий.

Затем я перебазировал, он работал только для заданий со значением столбца очереди = 'default', и я дал такие имена, как sendemail, inboxemail и т. Д.

Поэтому, когда я изменил это другое значение на «по умолчанию» в столбце очереди в таблице заданий, это задание было выполнено мгновенно, так как у меня была активна команда cli и php artisan queue: work.

Поэтому, если вы хотите запустить только определенную очередь по имени очереди, запустите команду - ›

очередь php artisan: прослушивание --queue = sendemail

or

очередь php artisan: прослушивание --queue = inboxemail

person Nikhil Chauhan    schedule 01.10.2020