我们有一个使用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();
}
}
答案 0 :(得分:1)
Gmail API具有相同的每日使用限制,适用于从您的应用程序发出的所有请求,以及每用户速率限制。
超过速率限制(转为快速)将导致HTTP 403 or HTTP 429
太多请求响应,并且您的应用应通过重试指数退避来响应。
500错误是服务器长时间响应的服务器打嗝,因此超时了您的请求。对此的解决方案与上述错误的解决方案相同,您应该实现指数退避并重试。
指数退避是网络的标准错误处理策略 客户端定期重试失败请求的应用程序 越来越多的时间。如果请求量很大或者 繁重的网络流量导致服务器返回错误,指数级 退避可能是处理这些错误的好策略。反过来, 它不是处理与之无关的错误的相关策略 限速,网络容量或响应时间,如无效 授权凭证或文件未找到错误。
使用得当,指数退避可以提高效率 带宽使用,减少了获得所需的请求数量 成功响应,并最大化请求的吞吐量 并发环境。
实现简单指数退避的流程如下:
答案 1 :(得分:0)
对于任何可能试图弄清为什么受到速率限制的人,还应该知道带宽限制约为750mb / hour或2500mb / day。此限制在连接到该用户帐户(IMAP,POP,API)的所有应用程序之间共享。我相信,甚至Gmail的使用都与此相对。如果其他某个应用程序耗尽了用户配额,则您的应用程序将获得相同的速率限制。