【问题标题】:Gmail API - Rate Limit Exceeded [429], Backend Error [500]Gmail API - 超出速率限制 [429],后端错误 [500]
【发布时间】:2014-11-12 05:54:26
【问题描述】:

我们有一个应用程序使用 Gmail API 来访问 Gmail 中的电子邮件。

我们随机收到以下错误消息

Google.Apis.Requests.RequestError 超出速率限制 [429] 错误 [ 消息[超出速率限制] 位置[-] 原因[rateLimitExceeded] 域[usageLimits] ]

然后我们在错误事件的代码中重试并得到

Google.Apis.Requests.RequestError 后端错误 [500] 错误 [ 消息[后端错误]位置[-]原因[后端错误] 域[全局] ]

然后我们在错误事件的代码中重试(我们尝试了 3 次)并且它按预期工作。

这里的 Gmail API 后端存在一些问题。我们每天进行

还有其他人遇到过这种奇怪的行为吗?

这是被调用的代码

 UsersResource.MessagesResource.GetRequest gr = gs.Users.Messages.Get(emailAccount, msgId);
 {
        gr.Format = UsersResource.MessagesResource.GetRequest.FormatEnum.Raw;
        Message m = new Message();
        try
        {
            m = gr.Execute();
        }
 }

【问题讨论】:

  • 这似乎是一个讨论问题,因此不适合 Stack Overflow。
  • 您提出什么类型的请求?使用批处理调用?
  • 嗨,Eric,只是一个简单的消息获取 - 没有批处理。我在想这是谷歌后端的一个小故障,带有误导性的错误消息。
  • 我们得到了相同的随机异常。我知道这是一个旧帖子,但有人找到任何解决方法吗?
  • 嗨@F3L1X79 - 没有解决方法 - 仍然出现,重试是我们找到的唯一解决方案。虽然现在错误非常罕见。

标签: c# google-api gmail-api google-api-dotnet-client quota


【解决方案1】:

Gmail API 具有相同的每日使用限制,适用于从您的应用程序发出的所有请求,以及每个用户的速率限制。

  • 每日使用 1,000,000,000 配额单位每天每个用户费率 限制
  • 每位用户每秒 250 个配额单位,移动平均值(允许 短脉冲)

超过速率限制(快速)将导致HTTP 403 or HTTP 429 Too Many Requests 响应,您的应用应通过指数退避重试来响应。

500 错误是服务器打嗝,服务器响应时间过长,导致您的请求超时。此问题的解决方案与上述错误的解决方案相同,您应实施指数退避并重试。

指数退避是网络的标准错误处理策略 客户端定期重试失败请求的应用程序 在越来越多的时间内。如果请求量很大或 繁重的网络流量导致服务器返回错误,指数级 退避可能是处理这些错误的好策略。反过来, 它不是处理与不相关的错误的相关策略 速率限制、网络容量或响应时间,例如无效 未找到授权凭据或文件错误。

使用得当,指数退避可以提高效率 带宽使用,减少了获得 成功响应,并最大化请求的吞吐量 并发环境。

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

  1. 向 API 发出请求
  2. 接收具有可重试错误代码的错误响应
  3. 等待 1s + random_number_milliseconds 秒
  4. 重试请求
  5. 接收具有可重试错误代码的错误响应
  6. 等待 2s + random_number_milliseconds 秒
  7. 重试请求
  8. 接收具有可重试错误代码的错误响应
  9. 等待 4s + random_number_milliseconds 秒
  10. 重试请求
  11. 接收具有可重试错误代码的错误响应
  12. 等待 8 秒 + random_number_milliseconds 秒
  13. 重试请求
  14. 接收具有可重试错误代码的错误响应
  15. 等待 16 秒 + random_number_milliseconds 秒
  16. 重试请求
  17. 如果仍然出现错误,请停止并记录错误。

【讨论】:

    【解决方案2】:

    对于任何可能试图弄清楚为什么他们会受到速率限制的人,也要知道带宽限制约为 750mb/小时或 2500mb/天。此限制在连接到该用户帐户的所有应用程序(IMAP、POP、API)之间共享。我相信即使是 Gmail 的使用也会影响这一点。如果其他应用程序占用了用户配额,您的应用程序将收到相同的速率限制。

    【讨论】:

      猜你喜欢
      • 2015-08-19
      • 2021-05-27
      • 2020-12-13
      • 1970-01-01
      • 2014-09-18
      • 1970-01-01
      • 2014-03-20
      • 2019-04-22
      • 1970-01-01
      相关资源
      最近更新 更多