无证费率限制?几百封邮件后“资源已耗尽”

问题描述 投票:0回答:1

我们正在使用 Google Workspace 的服务帐号(全域委托)通过 Gmail API 导入电子邮件。为单个帐户导入大约 200-300 封电子邮件后,我们总是收到错误“资源已耗尽(例如检查配额)”。早上的原因是:“rateLimitExceeded”,尽管不可能超出限制:

我们的流程是:首先,我们通过一个请求获取所有带有

history.list
的消息 ID。 然后,我们迭代消息列表并发送 45 封电子邮件的批量请求,每封电子邮件带有
messages.get
。在每个批次之后,我们会在发送下一个请求之前等待 4 秒。根据我们的理解,这应该远低于任何速率限制。

另外根据文档https://developers.google.com/gmail/api/reference/quota我们有250个配额单位每个用户每秒

我们的使用量加起来最多只能为 227(

history.list
= 2,
messages.get
= 5 * 45)。 有些帐户将有数百封电子邮件需要导入,大约 200-300 封后我们会收到上述错误消息。

我们尝试过增加超时时间并减小批量大小,但这也不起作用。

我们错过了什么吗?我们是否应该注意其他/未记录的速率限制?由于我们在导入中从未使用超过 250 个配额限制,并且每 4 秒仅使用一个请求,为什么我们仍然超出某个限制?

我们的使用统计数据也不表明我们接近超出任何(已知)限制:Screenshot of Cloud Console

如有任何建议,我们将不胜感激!

--- 编辑

完整错误消息:

{
  "error": {
    "code": 429,
    "message": "Resource has been exhausted (e.g. check quota).",
    "errors": [
      {
        "message": "Resource has been exhausted (e.g. check quota).",
        "domain": "global",
        "reason": "rateLimitExceeded"
      }
    ],
    "status": "RESOURCE_EXHAUSTED"
  }
}
google-api gmail-api rate-limiting quota
1个回答
0
投票

好吧,这些类型的错误确实很难追踪。

资源已耗尽(例如检查配额)。

对我来说意味着你已经达到了一天内可以完成的事情数量的硬性限制。

如果这是真的,该号码将在美国西部时间午夜后重置。所以这应该很容易测试。

如果确实如此,请检查此页面使用限制可能会让您了解您所达到的限制。

如果不是这样,那么可能是防洪。通常情况下,如果它的防洪谷歌会告诉你你正在碰到哪一个,你只需要放慢速度即可。

要测试它是否是这个,请等待三十分钟,看看它是否会再次运行,如果是的话,那么可能就是这个,你只需要在代码中实现 Exponential_backoff

但是,如果您使用的是标准谷歌客户端库之一,您可能需要检查它们中的大多数是否已经内置了指数退避功能。

不确定这是否有帮助,但它可能会给您一些关于检查内容的想法。

© www.soinside.com 2019 - 2024. All rights reserved.