2017-04-26 67 views
1

到目前为止,我有超过200个Google Analytics(分析)帐户来提取信息。我已使用限制数量的帐户(仅限10个)测试了我的解决方案。 一旦我把所有的帐号ID都放在我的逻辑里,它会给我错误配额限制每100秒100次请求Google AnalyticsAPI |每100秒处理100个请求的限额

foreach (var viewID in _viewIds) 
{ 
    foreach (var dateRange in dateRanges) 
    { 
     tTaskList.Add(Task.Run(async() => 
     { 
      try 
      { var tReports = await gc.PostAsyncTask(url, reportRequest); 

       foreach (var report in tReports.reports) 
       { 
        if (report != null) 
        { 
        //All report logic here 
        //(...) 

         bool hasNextPage = false; 
         do 
         { 
          //All pagination logic here 
          //(...) 
         }while(hasNextPage); 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       //Write in Log 
       var ex_message = Common.Utils.GetExceptionMessage(ex); 
       Logger.WriteConsoleLog(ex_message.MessageString, (int)Logger.Logs.ERROR, APIName, RequestID); 
      }   
     }) 
     ); //end add task 
    } 
} 

如何控制请求数量?为了避免得到这些错误?

回答

0

配额限制每100秒100次请求。

它基本上是防洪你要快。您最多可以在100秒内完成100个请求。你可以做什么,也许最简单的解决方案将是Implementing Exponential Backoff

我在我的应用程序进一步,虽然。我创建了一个请求队列(最多100个项目)。我将请求的时间记录到毫秒。在我发送一个请求之前,我会检查que中第一个和最后一个项目之间的时间差异,如果它超过95秒,我会暂停它的差异。这并没有完全阻止我获得这些错误,但它已经大幅降低了他们。

+0

所以,我们可以说,如果我使用这些队列解决方案和explonential回退,我可以设法避免这些错误?假设我大幅减少它们,但仍然有一个或另一个错误,我可以捕捉它们并执行指数退避并再次重试。 – bmvr

+0

这就是我所做的,如果我得到一个我只是重试它。我只是不喜欢这样,所以我增加了Que的想法来进一步减少它们。 Google实际上只是建议您实施退款。如果您喜欢我并且不喜欢在开发者控制台中看到报告中的错误,您不必添加它就可以了。 – DaImTo