Php 如何在Laravel中实现对长期运行导入的跟踪

Php 如何在Laravel中实现对长期运行导入的跟踪,php,laravel,architecture,laravel-5.1,long-running-processes,Php,Laravel,Architecture,Laravel 5.1,Long Running Processes,这更像是一个架构问题 我将编写一系列导入实现的代码。它们都需要一些参数(即CSV文件),然后将占用一些时间来继续。在我以前的项目中,我使用“shell_exec()”命令在后台发送这些导入,然后在浏览器中监视日志文件以报告状态。我现在最大的希望是,拉威尔接管这里,简化所有的手工工作 现在,我的问题是关于这背后所建议的类体系结构 我对大量进口产品的要求是: 每次导入都需要作为后台进程运行 在浏览器(和日志文件)中监视进度 在控制台中通过HTTP启动导入 现在我计划使用L5.1中的“作业”来实

这更像是一个架构问题

我将编写一系列导入实现的代码。它们都需要一些参数(即CSV文件),然后将占用一些时间来继续。在我以前的项目中,我使用“shell_exec()”命令在后台发送这些导入,然后在浏览器中监视日志文件以报告状态。我现在最大的希望是,拉威尔接管这里,简化所有的手工工作

现在,我的问题是关于这背后所建议的类体系结构


我对大量进口产品的要求是:

  • 每次导入都需要作为后台进程运行
  • 在浏览器(和日志文件)中监视进度
  • 在控制台中通过HTTP启动导入
现在我计划使用L5.1中的“作业”来实现基本导入。我正在努力实现某种“进度条”,并在浏览器中监视(最近的)“日志消息”。我不需要通过套接字获得真正的“实时”视图,但应该可以定期更新正在运行的导入的进度视图

  • 有人有什么建议吗,如何实现这些进展

我目前的做法:
读取CSV文件,将每一行放入队列元素并监视队列。日志消息可能会触发一个事件,该事件填充最近日志消息的堆栈。(我可能会遇到竞争条件,因为某些行可能依赖于另一行的先前处理)

我会创建如下ActiveBackgroundTask模型:

  • 处理程序\u类\u名称
  • 陈述
  • 进展
  • 最新日志消息
  • 结果
并在您的系统中创建一个cron任务,以定期检查此表并启动此表中状态为
created
的任务。每个任务在表中传递其
id
,以定期更新
结果
最新日志消息
字段

例如,您可以通过标准化每个任务的日志文件的位置来扩展这个想法,这样不仅可以提取最新的消息,还可以下载完整的任务日志

在这种情况下,可以很容易地从系统中的每个脚本检查每个任务的状态

检测由于PHP错误或异常而中止的死机任务时会出现问题。如果需要,您可以保持php进程
PIDs
,并且cron脚本可以检查
running
状态的任务是否仍在真正运行


这符合你的需要吗?

我会制作一个如下的ActiveBackgroundTask模型:

  • 处理程序\u类\u名称
  • 陈述
  • 进展
  • 最新日志消息
  • 结果
并在您的系统中创建一个cron任务,以定期检查此表并启动此表中状态为
created
的任务。每个任务在表中传递其
id
,以定期更新
结果
最新日志消息
字段

例如,您可以通过标准化每个任务的日志文件的位置来扩展这个想法,这样不仅可以提取最新的消息,还可以下载完整的任务日志

在这种情况下,可以很容易地从系统中的每个脚本检查每个任务的状态

检测由于PHP错误或异常而中止的死机任务时会出现问题。如果需要,您可以保持php进程
PIDs
,并且cron脚本可以检查
running
状态的任务是否仍在真正运行


这符合你的需要吗?

是的,应该可以。关于我的问题,我还对Laravel带来的开箱即用的东西或这里推荐的设计模式表示怀疑。@redless81我不确定您是否应该这样看待这些东西;)始终尽可能选择最简单的解决方案。模式是为了使复杂的事情变得更简单。我不喜欢5.1中的Laravel工作。对我来说,他们似乎有些做作。我同意也不同意;)我需要导入大约50MB的CSV数据,以便将其分发到多个表中。导入过程可能需要几个小时。我认为我需要考虑诸如可伸缩性等方面,我也希望对框架提供的体系结构给予足够的重视,因为它为其他开发人员带来了某种标准,使其更易于测试。不过,我同意,如果你不需要模式,就应该避免使用模式。是的,应该这样做。关于我的问题,我还对Laravel带来的开箱即用的东西或这里推荐的设计模式表示怀疑。@redless81我不确定您是否应该这样看待这些东西;)始终尽可能选择最简单的解决方案。模式是为了使复杂的事情变得更简单。我不喜欢5.1中的Laravel工作。对我来说,他们似乎有些做作。我同意也不同意;)我需要导入大约50MB的CSV数据,以便将其分发到多个表中。导入过程可能需要几个小时。我认为我需要考虑诸如可伸缩性等方面,我也希望对框架提供的体系结构给予足够的重视,因为它为其他开发人员带来了某种标准,使其更易于测试。然而,我同意,如果不需要模式,就应该避免使用它们。