使用 C# MVC 的 GMail API 超出用户速率限制
Posted
技术标签:
【中文标题】使用 C# MVC 的 GMail API 超出用户速率限制【英文标题】:User-rate limit exceeded for GMail API using C# MCV 【发布时间】:2019-04-22 14:29:36 【问题描述】:谁能帮我解决使用 C# MCV 应用程序超出 GMail API 的用户速率限制的解决方案。自过去 5 天以来,我一直坚持这一点。互联网上没有文件。谷歌也没有解决方案。我为访问谷歌服务启用了计费。使用类似...的代码
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"));
【问题讨论】:
【参考方案1】:说明
用户速率限制错误消息是洪水保护。您作为服务帐户登录的当前用户每分钟/秒只能发出 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 是免费的,使计费不会做太多。
注意
TBH 如果您通过Users.Labels.List("me")
得到此信息,我会感到惊讶,除非您为每个访问您网站的用户运行此代码,而不是缓存数据。
【讨论】:
以上是关于使用 C# MVC 的 GMail API 超出用户速率限制的主要内容,如果未能解决你的问题,请参考以下文章
如何使用带有 OAuth 令牌的 Asp.Net MVC 中的 gmail API 更快地获取日期明智的电子邮件