Php 作业队列-cron可以工作吗?
我正在开发一个小应用程序,需要人们通过电子邮件上传图像。它是在PHP(无框架)中使用MySQL和S3构建的 到目前为止,在我的场景中:电子邮件存储在POP3帐户上。脚本每分钟运行一次,获取最早的电子邮件,调整图像大小,将其上载到S3,将其路径存储在数据库中,删除电子邮件 在更大范围内,这将如何管理?cron作业是处理这种情况的最佳方法吗?如果这个过程需要一分钟以上的时间怎么办:它将重叠并最终失败,对吗?或者如果不到一分钟怎么办?考虑到我在更大范围内每小时会有60多个请求,我会得到不必要的空闲时间 也许我应该使用一个.forward文件来处理电子邮件,但我还是不能控制流量 我相信这些场景中的大多数都是可行的,我只是对最佳实践感到好奇Php 作业队列-cron可以工作吗?,php,architecture,queue,Php,Architecture,Queue,我正在开发一个小应用程序,需要人们通过电子邮件上传图像。它是在PHP(无框架)中使用MySQL和S3构建的 到目前为止,在我的场景中:电子邮件存储在POP3帐户上。脚本每分钟运行一次,获取最早的电子邮件,调整图像大小,将其上载到S3,将其路径存储在数据库中,删除电子邮件 在更大范围内,这将如何管理?cron作业是处理这种情况的最佳方法吗?如果这个过程需要一分钟以上的时间怎么办:它将重叠并最终失败,对吗?或者如果不到一分钟怎么办?考虑到我在更大范围内每小时会有60多个请求,我会得到不必要的空闲时间
谢谢 尝试使用长时间运行的流程。它检查邮件,并处理所有邮件。如果完成后它找不到更多的邮件,那么它会休眠一分钟
如果您在稳定性方面有问题,您可以始终使用类似的方法。尝试使用长时间运行的流程。它检查邮件,并处理所有邮件。如果完成后它找不到更多的邮件,那么它会休眠一分钟
如果您在稳定性方面有问题,您可以始终使用类似的方法。稍微修改的方法可以是:
- 每分钟从cron运行一次脚本
- 您的脚本检查它的另一个实例是否已在运行,以及该实例是否存在
- 正在运行的脚本将处理剩余队列,直到该队列为空或包含多个元素(例如,最大值为10)
我实现的修复是所描述的检查,如果另一个实例正在运行,只需退出并等待下一个周期。在那次修复之后,我好几年都没有遇到过问题。稍微修改一下的方法可能是:
- 每分钟从cron运行一次脚本
- 您的脚本检查它的另一个实例是否已在运行,以及该实例是否存在
- 正在运行的脚本将处理剩余队列,直到该队列为空或包含多个元素(例如,最大值为10)