1

Это более архитектурный вопрос.Как реализовать трассировку для долгосрочного импорта в Laravel

Я собираюсь закодировать кучу реализации импорта. Все они ожидают некоторые параметры (т. Е. Файл CSV), а затем приступят к некоторому времени для продолжения. В моем предыдущем проекте я использовал для отправки этих Импорт в фоновом режиме с помощью команды «shell_exec()» и, кроме того, отслеживал файл журнала в браузере, чтобы сообщить о состоянии. Моя большая надежда в том, что Ларавель берет на себя здесь, чтобы упорядочить все эти ручные работы.

На данный момент мой вопрос будет касаться предлагаемой архитектуры класса.


Мои требования для связки импорта являются:

  • Каждый импорт должен работать как фоновый процесс
  • прогресс монитора в браузере (и логфайл)
  • импорт Начало в консоль и через HTTP

Сейчас я планирую использовать «Работа» в L5.1 для реализации основного импорта. То, с чем я борюсь, - это реализация какого-то «индикатора прогресса» и мониторинга (самых последних) «сообщений журнала» в браузере. Мне не нужно настоящее «живое» представление через сокеты, но должно быть возможно регулярно обновлять представление прогресса работающего импорта.

  • Есть ли у кого-нибудь подсказки, как реализовать этот прогресс?

Мой подход до сих пор: Прочитайте файл CSV, поместить каждую строку в элемент очереди и следить за очередью. Сообщения журнала могут инициировать событие, которое заполняет стек из последних сообщений журнала. (Я могу работать в условиях гонки, поскольку некоторые линии могут зависеть от предыдущей обработки другой линии)

ответ

0

Я сделал бы ActiveBackgroundTask модель, как это:

  • handler_class_name
  • состояние
  • прогресс
  • latest_log_messages
  • результат

И создайте задачу cron в вашей системе, чтобы периодически проверять эту таблицу и запускать задачи, которые появляются в этой таблице в состоянии created. Каждой задаче передается ее id в таблице для периодического обновления полей result и latest_log_messages.

Вы можете расширить эту идею, например, стандартизовать расположение файлов журнала для каждой задачи, чтобы можно было извлечь не только последние сообщения, но и полный журнал задач.

В этом случае состояние каждой задачи можно было бы очень легко проверить из каждого скрипта в вашей системе.

Будет обнаружена проблема обнаружения мертвых задач, которые прерываются из-за ошибки или исключения PHP. Если вам это нужно, вы можете сохранить php-процесс PIDs и что cron-скрипт может проверить, действительно ли выполняются задачи с состоянием running.

Этот номер соответствует вашим потребностям?

+0

Да, это должно быть сделано. С моим вопросом я также был доволен тем, что Laravel приносит с собой из коробки или какие шаблоны дизайна рекомендуется здесь. – patriziotomato

+0

@ redless81 Я не уверен, что вы должны смотреть на вещи таким образом;) Всегда выбирайте самое простое решение. Шаблоны предназначены для упрощения сложных вещей. Мне не нравится Laravel Jobs в 5.1. Они кажутся искусственными для меня. –

+0

Я согласен и не согласен;) Мне нужно импортировать около 50 МБ данных CSV, чтобы распространять его по нескольким таблицам. Процесс импорта может занять несколько часов. Я думаю, мне нужно рассмотреть такие аспекты, как масштабируемость и т. Д. Также я хочу воспользоваться преимуществами архитектуры, предоставляемой инфраструктурой, потому что она привносит какой-то стандарт для других разработчиков, делает ее более проверяемой. Однако я согласен с тем, что вам следует не использовать шаблоны, если они вам не нужны. – patriziotomato

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

  • Нет связанных вопросов^_^