2017-07-26 6 views
1

Ich erstelle einen Kanal, der Änderungen an Nutzern empfängt, die sich in meiner Anwendung befinden. Das Hauptproblem ist, dass nach 2-3 Webhooks ein Fehler angezeigt wird, der besagt, dass der Benutzer die Kontingentgrenzen überschritten hat.Google Drive-API-Kontingent überschritten

Das hat keinen Sinn, weil ich nur 2 Post-Nachricht erhalten habe (Ich sah es auf Ngrok).

Ich habe auf Google-Konsole auf Laufwerk-API und Quote gegangen. Jedes Mal, wenn ich einen Webhook erhalte, wird die Anzahl der Abfragen um 500 erhöht. Wenn also ein Benutzer zwei Änderungen vornimmt und zwei Webhooks erhält, übersteigt die Anzahl der Abfragen die von Google zugelassenen 1000, und ich erhalte diesen Fehler.

, dass der Code ist, wo ich den Kanal zu aktivieren:

@GET 
    @Path("/enable") 
    public void enable(@Context HttpServletRequest request, @Context HttpServletResponse response) throws IOException { 
     Credential credential = initFlow().loadCredential("user"); 
     Drive service = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME).build(); 
     Channel channel = new Channel(); 
     channel.setId(UUID.randomUUID().toString()); 
     channel.setType("web_hook"); 
     channel.setAddress("https://389825dc.ngrok.io/GDriveRest/app/gdrive/webhook"); 
     StartPageToken page = service.changes().getStartPageToken().execute(); 
     GDrive.savedPageToken = page.getStartPageToken(); 
     service.changes().watch(savedPageToken, channel).execute(); 
    } 

und die folgende ist die Webhook:

@POST 
    @Path("/webhook") 
    public void webhook(@Context HttpServletRequest request, @Context HttpServletResponse response) throws IOException { 
     Credential credential = initFlow().loadCredential("user"); 
     Drive service = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME).build(); 
     String pageToken = savedPageToken; 

     while (pageToken != null) { 
      ChangeList changes = service.changes().list(pageToken).execute(); 

      for (Change change : changes.getChanges()) { 
       Log.info("Change found for file: " + change.getFileId()); 
      } 
      if (changes.getNewStartPageToken() != null) { 
       savedPageToken = changes.getNewStartPageToken(); 
      } 
      pageToken = changes.getNewStartPageToken(); 
     } 
     response.setStatus(200); 
    } 

Dies ist der Fehler:

Caused by: com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden 
{ 
    "code" : 403, 
    "errors" : [ { 
    "domain" : "usageLimits", 
    "message" : "User Rate Limit Exceeded", 
    "reason" : "userRateLimitExceeded" 
    } ], 
    "message" : "User Rate Limit Exceeded" 
} 

Warum ist dies Ereignis?

Antwort

0

Im Code ist ein Fehler aufgetreten. Ich hatte folgendes zu ändern:

PageToken = changes.getNewStartPageToken(); 

zu

pageToken = changes.getNextPageToken(); 

Die riesige Menge von Anfragen war, weil ich auf jeder Schleife eine neue Startseite Token angefordert hat, eine Endlosschleife zwingen.

0

Der aufgetretene Fehler wurde in this guide besprochen.

Suggested actions:

  • Raise the per-user quota in the Developer Console project.
  • If one user is making a lot of requests on behalf of many users of a G Suite domain, consider a Service Account with authority delegation (setting the quotaUser parameter).
  • Use exponential backoff.

Sie können auch versuchen, diese SO post für verwandtes Thema zu besuchen.

Verwandte Themen