PNC*_*PNC 5 c# google-api quota google-api-dotnet-client gmail-api
我们有一个使用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();
}
}
Run Code Online (Sandbox Code Playgroud)
Gmail API 具有相同的每日使用限制(适用于应用程序发出的所有请求)以及每用户速率限制。
超过速率限制(速度太快)将导致HTTP 403 or HTTP 429请求响应过多,您的应用程序应通过指数退避重试来响应。
500 错误是服务器故障,服务器响应时间过长,导致您的请求超时。此问题的解决方案与上述错误的解决方案相同,您应该实施指数退避并重试。
指数退避是网络应用程序的标准错误处理策略,其中客户端在逐渐增加的时间内定期重试失败的请求。如果大量请求或繁重的网络流量导致服务器返回错误,指数退避可能是处理这些错误的好策略。相反,它不是处理与速率限制、网络容量或响应时间无关的错误的相关策略,例如无效的授权凭据或文件未找到错误。
如果使用得当,指数退避可以提高带宽使用效率,减少获得成功响应所需的请求数量,并最大限度地提高并发环境中请求的吞吐量。
简单指数退避的实现流程如下。