任何人都可以帮助我获得解决方案使用C#MCV应用程序超出GMail API的用户速率限制。自最近5天以来,我一直坚持这一点。互联网上没有文件。谷歌也没有解决方案。我已启用结算功能以访问Google服务。使用类似...的代码
var certificate = new X509Certificate2(AssemblyDirectory + string.Format("\\{0}",CertificateFileName), CertificatePassword, X509KeyStorageFlags.Exportable);
ServiceAccountCredential credential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(ServiceAccountEmail)
{
Scopes = new[] { GmailService.Scope.GmailModify },
User=this.User
}.FromCertificate(certificate));
// Create the service.
service = new GmailService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = this.ApplicationName,
ApiKey="xxxxxxxxxxxxxxxxxxx",
});
ListLabelsResponse response = service.Users.Labels.List("me").Execute();
Labels = response.Labels.ToList();
if (!Labels.Select(l => l.Name).Contains("Processed"))
{
Labels.Add(CreateLabel("Processed"));
}
答案 0 :(得分:2)
说明
用户速率限制错误消息是洪水保护。您当前登录的用户(作为您的服务帐户)每分钟/秒只能发出X个请求
如您所见,用户最多可以在100秒内进行25,000个查询。您的应用程序最多可以在100秒内发出2,000,000个请求。 Gmail还具有其他一些限制,可以记录mail sending,但尚未记录。
达到用户速率限制配额时,除了降低应用程序速度之外,您无能为力。
标准错误消息
403:超出用户速率限制 已达到每用户限制。这可能是开发者控制台的限制,也可能是云端硬盘后端的限制。
{
"error": {
"errors": [
{
"domain": "usageLimits",
"reason": "userRateLimitExceeded",
"message": "User Rate Limit Exceeded"
}
],
"code": 403,
"message": "User Rate Limit Exceeded"
}
}
建议的操作
使用指数补偿。
403:超出速率限制 用户已达到Google Drive API的最高请求速率。该限制取决于请求的类型。
{
"error": {
"errors": [
{
"domain": "usageLimits",
"message": "Rate Limit Exceeded",
"reason": "rateLimitExceeded",
}
],
"code": 403,
"message": "Rate Limit Exceeded"
}
}
建议的操作
使用指数补偿。
实施指数补偿
指数退避是网络应用程序的标准错误处理策略,在该策略中,客户端会在越来越多的时间内定期重试失败的请求。如果大量请求或繁重的网络流量导致服务器返回错误,则指数退避可能是处理这些错误的好策略。相反,这不是处理与速率限制,网络量或响应时间无关的错误(例如无效的授权凭据或找不到文件的错误)的相关策略。
正确使用指数补偿可以提高带宽使用效率,减少获得成功响应所需的请求数量,并在并发环境中最大化请求的吞吐量。
创建请求不是幂等的。简单的重试是不够的,可能会导致实体重复。重试之前,请检查该实体是否存在。
计费
不可能提高用户速率限制,以防止开发人员泛滥Google服务器。 Gmail API是免费的,启用计费不会做太多事情。
注意
如果您通过执行Users.Labels.List("me")
来获得此操作,我会感到惊讶,除非您为访问您网站的每个用户运行此代码,而不是缓存数据。