2017-04-26 7 views
1

これまでのところ、私は200を超えるGoogleアナリティクスアカウントを利用して情報を取得しています。限られた数のアカウントでソリューションをテストしました(わずか10)。 すべてのアカウントIDをロジックに入れたら、クォータリミットの100秒あたりのリクエスト数がになります。GoogleアナリティクスAPI |クォータ制限を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アイテムあります)。私はミリ秒まで要求を出した時を記録します。私が要求を送る前に、もしその差があるとそれ以上休止したら、最初のキューと最後のキューの間の時間差をチェックします。これは、私がこれらのエラーを得るのを完全に止めたわけではありませんが、そのエラーを大幅に減らしました。

+0

私はこれらのキューソリューションとexplonential backoffを使用すると、これらのエラーを回避することができました。私はそれらを大幅に減らすと言うが、まだ1つまたは別のエラーがある、私はそれらをキャッチし、指数バックオフを行い、再度やり直すことができます。 – bmvr

+0

それは実際に私も同様に私は1つだけ私はそれを再試行して取得する場合。私はとても好きではなかったので、私はそれをさらに減らすためにQueの考えを加えました。 Googleでは、実際にバックオフを導入することを実際に推奨しています。デベロッパーコンソールのレポートにエラーが表示されているような場合は、それだけで依存するキューを追加する必要はありません。 – DaImTo

関連する問題