Это скорее архитектурный вопрос.
Я собираюсь кодировать кучу реализаций импорта. Все они ожидают некоторых параметров (то есть файла CSV), а затем займут некоторое время, чтобы продолжить. В моем предыдущем проекте я отправлял эти Imports в фоновом режиме, используя команду «shell_exec ()», а затем отслеживал файл журнала в браузере, чтобы сообщить о состоянии. Теперь я очень надеюсь, что Laravel возьмет на себя ответственность за то, чтобы упорядочить всю эту ручную работу.
На данный момент мой вопрос будет о предлагаемой архитектуре класса за этим.
Мои требования К куче импортных товаров относятся:
Прямо сейчас я планирую использовать «Задание» в L5.1 для реализации базового импорта. То, с чем я борюсь, это реализация какой-то «индикатора выполнения» и отслеживание (самых последних) «сообщений журнала» в браузере. Мне не нужен реальный «живой» вид через сокеты, но должна быть возможность регулярно обновлять вид прогресса работающего импорта.
Мой подход пока:
Прочитайте файл CSV, поместите каждую строку в элемент очереди и следите за очередью. Сообщения журнала могут вызвать событие, которое заполняет стек самых последних сообщений журнала. (Я могу столкнуться с условиями гонки, потому что некоторые строки могут зависеть от предыдущей обработки другой строки)
Я хотел бы сделать модель ActiveBackgroundTask, как это:
И создайте задачу cron в вашей системе, чтобы периодически проверять эту таблицу и запускать задачи, которые появляются в этой таблице в состоянии created
, Каждое задание проходит свое id
в таблице периодически обновлять result
а также latest_log_messages
поле.
Вы можете расширить эту идею, например, стандартизировав расположение файлов журналов для каждой задачи, чтобы можно было извлечь не только последние сообщения, но и загрузить полный журнал задач.
В этом случае состояние каждой задачи можно очень легко проверить с помощью любого скрипта в вашей системе.
Будет проблема с обнаружением мертвых задач, которые были прерваны из-за ошибки или исключения PHP. Если вам это нужно, вы можете сохранить процесс PHP PIDs
и этот скрипт cron может проверить, если задачи с running
государство все еще действительно работает.
Это соответствует вашим потребностям?
Других решений пока нет …