Gmail API - 超出速率限制[429],后端错误[500]

时间:2014-09-18 02:46:55

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

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

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

  

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

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

  

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

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

此处的Gmail API后端存在一些问题。我们正在制作<每天有1000个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();
        }
 }

2 个答案:

答案 0 :(得分:1)

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

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

超过速率限制(转为快速)将导致HTTP 403 or HTTP 429太多请求响应,并且您的应用应通过重试指数退避来响应。

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. 等待8s + random_number_milliseconds秒
  13. 重试请求
  14. 收到具有可重试错误代码的错误响应
  15. 等待16s + random_number_milliseconds秒
  16. 重试请求
  17. 如果仍然出现错误,请停止并记录错误。

答案 1 :(得分:0)

对于任何可能试图弄清为什么受到速率限制的人,还应该知道带宽限制约为750mb / hour或2500mb / day。此限制在连接到该用户帐户(IMAP,POP,API)的所有应用程序之间共享。我相信,甚至Gmail的使用都与此相对。如果其他某个应用程序耗尽了用户配额,则您的应用程序将获得相同的速率限制。