如何让PHP监听作业表



我正在开发一个没有框架的php系统。

它具有每晚通过第三方api自动运行一些作业的功能。它循环表中的所有作业,并使用curl调用api。


// run cron job to loop this table
ID JOB
1 updateUser
2 getLatestInfo/topicA
……
//code
// if UpdateUser
loop user table and call api to get latest info…
Also other curl task will do here like send email / notification …

它以前工作得很好。但是最近我们有了很多新用户。它将同时调用50-100个API。

每个api调用将需要10-20秒来响应,如果超时,我们将重试api。

我检查了日志,第一份工作总共花了3-4个小时(有很多错误)

虽然我可以让cron作业为curl排队,比如获取前5个curl并每1分钟运行它们。但如果我们继续增加用户或任务,而第三方api保持缓慢。完成这项任务可能需要更多的时间。

有没有办法让它一直监听作业表,然后一个一个地运行curl ?我想它可以自动触发,如果新行被添加到表。(如websocket?),而不是单一的php运行和无限循环(防止一些错误发生,需要手动重新运行php任务)

(API密钥在php项目中,所以我希望我能在同一项目中做到这一点)

PHP脚本需要触发才能做某事,它们不能真正"在后台运行";(我的意思是,从技术上讲,它们可以这样做,但PHP不应该这样使用)。

相反,通常使用以下三个选项之一来进行作业管理:
  • 在每次web调用时调用作业,以及生成输出的实际代码
  • 使用外部web cron服务查询与作业执行绑定的特定url
  • 在您的系统上使用本地cron作业来调用php可执行文件,并让它定期执行作业

如果您想要一个基于事件的系统,PHP可能是错误的选择。根据您的数据库系统,尽管您可能能够创建一个小的包装器代码,订阅数据库更改并在插入时触发,然后再次调用PHP -但使用更合适的编程语言/环境绝对是一个更干净的解决方案。

最新更新