【发布时间】:2021-10-16 06:24:55
【问题描述】:
我正在开发没有框架的 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 保持缓慢。完成任务可能需要更多小时。
有没有什么办法可以让它一直监听job表,并且一个一个地运行curl? 如果将新行添加到表中,我希望它可以自动触发。 (比如 websocket?)而不是单个 php 运行和无限循环(为了防止发生一些错误,需要手动重新运行 php 任务)
(API密钥在php项目中,所以我希望我可以在同一个项目中这样做)
【问题讨论】:
-
您要求我们更改更新数据的 PHP 脚本的性能特征。但是您没有向我们展示代码,也没有提供数据结构的任何细节。 “如果将新行添加到表中,我希望它可以自动触发” - 这不是数据库触发器的用途吗?这听起来确实像是您试图解决这里的错误问题。
标签: php curl cron message-queue