2016-08-23 3 views
1

У меня есть задание, которое отправляется с двумя аргументами - path и filename в файл. Задание анализирует файл с помощью simplexml, затем уведомляет об этом в базе данных и перемещает файл в соответствующую папку для сохранения. Если что-то пойдет не так, оно перемещает файл в другую папку для файлов с отказами, а также создает событие, чтобы дать мне уведомление.Как устранить неполадки при работе с нулями в очереди?

Моя проблема заключается в том, что иногда работа будет терпеть неудачу. Задача удаляется из очереди, но файл не анализируется и остается в том же каталоге. Таблица failed_jobs пуста (я использую драйвер очереди базы данных для разработки), и метод failed() не был запущен. Метод Queue::failing(), который я установил в поставщик услуг приложения, также не был запущен - я знаю, поскольку оба из них содержат только один вызов журнала, чтобы проверить, были ли они удалены. Журнал Laravel пуст (он доступен для чтения, и Laravel пишет для него другие ошибки - я дважды проверял), а также соответствующие файлы системного журнала, такие как, например, PHP.

Сначала я думал, что это проблема с таймаутом, но прослушиватель очереди не потерпел неудачу, не остановился и не был перезапущен. Я все равно увеличил тайм-аут до 300 секунд и подтвердил, что все строки «[datetime] Processed: [job]», которые генерирует слушатель, были в пределах этого промежутка времени. Время выполнения Php и т. Д. Также намного больше, чем требуется для этой работы.

Так как же я могу устранить это, когда журналы пусты, ничего не появляется, и я не получаю уведомления о том, что не так? Если я поставил в очередь 200 файлов, тогда, возможно, 180 будет обработано, а остальные 20 будут терпеть неудачно. Если я обновляю базу данных + миграцию и снова стану в очередь на 200 же, тогда, возможно, 182 будет обработано, а 18 будет терпеть неудачу - но они не обязательно будут одинаковыми.

Мой метод ручки, упрощена, чтобы показать соответствующие биты, выглядит следующим образом:

public function handle() 
{ 
    try { 
     $xml = simplexml_load_file($this->path.$this->filename); 
     $this->parse($xml); 
     $parsedFilename = config('feeds.parsed path').$this->filename; 
     File::move($this->path.$this->filename, $parsedFilename); 
    } catch (Exception $e) { 
     // if i put deliberate errors in the files, this works fine 
     $errorFilename = config('feeds.error path').$this->filename; 
     File::move($this->path.$this->filename, $errorFilename); 
     event(new ParserThrewAnError($this->filename)); 
    } 
} 

ответ

0

Хорошо, так что я до сих пор не имеют ни малейшего представления, почему , но ... после перезапуска VM я испытал восемь раз с различными файлами и вариантами и имел нулевые проблемы. Если кто-то может угадать причину, не стесняйтесь отвечать, и я приму ваш ответ, если это звучит разумно. На данный момент, я буду отмечать свой собственный ответ как можно скорее, если кто-то еще наткнется на это позже.

Смежные вопросы