google-api - 了解 Gmail api 配额

标签 google-api gmail-api quota

我已阅读此处的 gmail api 配额说明 ( https://developers.google.com/gmail/api/v1/reference/quota ),但仍无法理解导致我们超出限制的原因。

问题1: 每个用户配额中的用户是多少?我不确定该用户是 gmail 个人用户,还是使用 gmail api 的服务客户端。

问题2: 我们已经多次看到以下错误,但没有看到任何明显的限制。

"error": {
 "errors": [
  {
   "domain": "usageLimits",
   "reason": "rateLimitExceeded",
   "message": "Rate Limit Exceeded"
  }
 ],
 "code": 429,
 "message": "Rate Limit Exceeded"
}

我们的速度低于 250 单位/秒和 25,000 单位/100 秒。我们仅使用history.list和message.get调用,不发送或修改。
我还缺少其他配额吗?

最佳答案

  1. 用户配额取决于您正在访问的帐户。所以这就是 GMail 帐户。有时你可以通过发送随机 quotaUser 来欺骗它但这并不总是有效,我怀疑 Google 还会使用您的 IP 地址来跟踪配额。

  2. 用户速率限制是您要快速进行的防洪措施。

Per User Rate Limit 250 quota units per user per second, moving average (allows short bursts)

Exceeding a rate limit will cause an HTTP 403 or HTTP 429 Too Many Requests response and your app should respond by retrying with exponential backoff.

Google 的计算并不完美,您可能会发送更多或更少的内容,但仍然会达到此配额。只需实现指数退避即可。

指数退避

简单指数退避的实现流程如下:

  1. 向 API 发出请求。
  2. 收到 HTTP 403 速率受限响应,这表明您应该重试该请求。
  3. 等待 1 + random_number_milliseconds 秒,然后重试请求。
  4. 收到 HTTP 403 速率受限响应,这表明您应该重试该请求。
  5. 等待 2 + random_number_milliseconds 秒,然后重试该请求。
  6. 收到 HTTP 403 速率受限响应,这表明您应该重试该请求。
  7. 等待 4 + random_number_milliseconds 秒,然后重试请求。
  8. 收到 HTTP 403 速率受限响应,这表明您应该重试该请求。
  9. 等待 8 + random_number_milliseconds 秒,然后重试请求。
  10. 收到 HTTP 403 速率受限响应,这表明您应该重试该请求。
  11. 等待 16 + random_number_milliseconds 秒,然后重试请求。
  12. 停下来。报告或记录错误。

关于google-api - 了解 Gmail api 配额,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40984486/

相关文章:

push-notification - Google 日历推送通知 - 发送到源本身的通知

google-apps-script - 在没有随机 Utilities.sleep 的情况下处理 UrlFetch 速率限制的正确方法?

c# - Google API v3 - 无法获取日历列表

email - Google SMTP 服务器与通过 Google Apps 服务帐户发送电子邮件

gmail - Google Pub/Sub webhook 调用服务器后无法检索消息内容

javascript - 使用 gmail.js 创建元素

azure - 如何查找每个资源组的资源类型的配额限制?

php - 使用 youtube data api v3 和 php 从 youtube 获取视频列表

docker - 使用 Docker-Compose 和存储选项(大小)

mongodb - 设置 MongoDB 数据库配额 (SIZE)