【问题标题】:PHP cron calls causing incorrect dataPHP cron 调用导致数据不正确
【发布时间】:2023-03-11 09:27:01
【问题描述】:

我有一个有趣的问题;我从外部提供者那里获取数据,为了完整起见,假设它是这样返回的:

[
    [id: 1pm, item_a: 55, item_b: 180], // hour's passed so data is finished.
    [id: 2pm, item_a: 55, item_b: 180], // hour's passed so data is finished.
    [id: 3pm, item_a: 55, item_b: 180], // hour's passed so data is finished.
    [id: 4pm, item_a: 55, item_b: 180], // hour's passed so data is finished.
    [id: 5pm, item_a: 0, item_b: 0], // current hour - data keeps updating periodically
]

我每小时运行一次 cron 调用以获取最新一小时的元素(即上面组中的 5pm)。

注意item_aitem_b 的初始值为0。这是因为该小时的数据不断从第三方更新。这不是在设定的时间段内,这让我很难准确地收集数据。由于我正在为大约 1400 个不同的对象获取数据,它们每个都会在第三方端以随机间隔进行更新,这会在时间结束后给我留下不正确的数据。

我目前每 15 分钟对执行以下操作的内部 php 脚本运行一次 cron 作业;

  • 获取最新的行
  • 检查第三方 API
  • 如果 item_aitem_b 不同 -> 我们更新所有行
  • 如果不是,则脚本自行退出。

*/15 * * * * curl my-website.com/api/path-to-update?access_key=my_access_key

这会导致数据 a) 延迟,并且 b) 有时会少于应有的数据。

我是否需要设置 RabbitMQ 之类的东西来处理数据/检查/等的持续流式传输?

【问题讨论】:

  • 可能 API 调用和更新本地数据需要一些时间来更新,或者对 API 的某些调用太慢而无法同步响应。试试看:docs.guzzlephp.org

标签: php api cron


【解决方案1】:

我最终创建了一个单独的调用,对下一小时 15 分钟内的“小时”数据进行最终检查。

所以电话最终是;

$Api->data_fetch_new_hour();
$Api->data_update_currency_hour();
$Api->data_update_previous_hour();

全部在单独的 cron 作业上运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 2021-03-09
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    相关资源
    最近更新 更多