【问题标题】:User-rate limit exceeded for GMail API using C# MCV使用 C# MVC 的 GMail API 超出用户速率限制
【发布时间】: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"));
    }

【问题讨论】:

    标签: c# google-api gmail-api google-api-dotnet-client service-accounts


    【解决方案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") 得到此信息,我会感到惊讶,除非您为每个访问您网站的用户运行此代码,而不是缓存数据。

    【讨论】:

      猜你喜欢
      • 2014-09-18
      • 2020-12-13
      • 1970-01-01
      • 2021-05-27
      • 1970-01-01
      • 2019-05-08
      • 1970-01-01
      • 2014-11-12
      • 1970-01-01
      相关资源
      最近更新 更多