首页 > 解决方案 > 如何让 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 小时(有很多错误)

虽然我可以为 curl 排队做 cron 工作,比如获得前 5 个 curl 并每 1 分钟运行一次。但是如果我们不断增加用户或任务,并且第三方 api 保持缓慢。完成任务可能需要更多时间。

有什么解决方案可以让它一直听作业表,并一一运行 curl?如果将新行添加到表中,我希望它可以自动触发。(像websocket?)而不是单个php来运行和无限循环(为了防止发生一些错误并且需要手动重新运行php任务)

(API 密钥在 php 项目中,所以我希望我可以在同一个项目中这样做)

标签: phpcurlcronmessage-queue

解决方案


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

相反,通常使用三个选项之一来进行作业管理:

  • 在来自网络的每次调用中调用作业,以及生成输出的实际代码
  • 使用外部 Web cron 服务来查询与作业执行相关的特定 URL
  • 使用系统上的本地 cron 作业来调用 php 可执行文件并让它定期执行作业

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


推荐阅读