【问题标题】:Rate limit exceeded in Batch query批量查询超出速率限制
【发布时间】:2014-06-27 00:40:39
【问题描述】:

我有客户端应用程序可以将文件插入 Google 驱动器。有一次需要将多个文件插入 Google Drive。批量查询(GTLBatchQuery)用于一次插入多个文件到谷歌驱动器。在插入期间的某个时间,服务器抛出速率限制超出错误:

    "error" : {
  "message" : "Rate Limit Exceeded",
  "data" : [
    {
      "reason" : "rateLimitExceeded",
      "message" : "Rate Limit Exceeded",
      "domain" : "usageLimits"
    }
  ],
  "code" : 417
},

请指导我正确的方法来启用重试此错误。我尝试将 retryenabled 设置为 service:
self.driveService.retryEnabled = YES; self.driveService.maxRetryInterval = 60.0;

但是没有效果。

  1. 批量查询可以设置重试吗?
  2. 是否需要将启用重试设置为GTMHTTPFetcher


感谢任何关于在 Objective-c 中实现指数退避的代码 sn-p。

【问题讨论】:

  • 现有样本(可能是 dredit)显示 exp。退避样本。 drive api 文档也可以。

标签: ios objective-c google-drive-api


【解决方案1】:
Google 文档中显示的

标准指数退避并不是处理速率限制错误的正确方法。您只会重试重载驱动器并使问题变得更糟。

此外,如果您有超过 20 个左右的更新,几乎可以保证批量发送多个更新会触发速率限制错误,所以我也不会这样做。

我的建议是:-

  1. 不要使用批处理,或者如果使用,请将每个批处理保持在 20 次以下更新
  2. 如果您获得速率限制,请退避至少 5 秒,然后再重试
  3. 通过将更新保持在 20 以下或将提交率保持在每 2 秒一次以下来尝试避免速率限制错误

这些数字都没有记录,可能会发生变化。

3 的原因是驱动器中存在(曾经,谁知道)一个错误,即使更新返回了速率限制错误,它实际上确实成功了,因此您最终可能会插入重复的文件。见403 rate limit on insert sometimes succeeds

【讨论】:

    猜你喜欢
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 2012-08-10
    相关资源
    最近更新 更多