Admin SDK中的用户速率限制超出异常

时间:2013-11-29 12:44:05

标签: google-app-engine google-admin-sdk

我正在使用Admin SDK。当我更新单个用户时,它工作正常但是当我尝试更新一堆(1000)用户时,我得到超出用户速率限制。请检查下面我的代码并告诉我我错过了什么?或者说出任何建议?

 private Directory getDirectoryService(String adminEmailAddress){
 Directory directoryService = null;
 try {
      Collection<String> SCOPES = new ArrayList<String>();
      SCOPES.add("https://www.googleapis.com/auth/admin.directory.user");
      SCOPES.add("https://www.googleapis.com/auth/admin.directory.user.readonly");
      SCOPES.add("https://www.googleapis.com/auth/admin.directory.group");
      SCOPES.add("https://www.googleapis.com/auth/admin.directory.group.readonly");
      SCOPES.add("https://www.googleapis.com/auth/admin.directory.orgunit");
      SCOPES.add("https://www.googleapis.com/auth/admin.directory.orgunit.readonly");
      SCOPES.add("https://www.googleapis.com/auth/userinfo.profile");

      HttpTransport httpTransport = new NetHttpTransport();
      JacksonFactory jsonFactory = new JacksonFactory();
      GoogleCredential credential = new GoogleCredential.Builder()
      .setTransport(httpTransport)
      .setJsonFactory(jsonFactory)
      .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
      .setServiceAccountScopes(SCOPES)
      .setServiceAccountUser(adminEmailAddress)
      .setServiceAccountPrivateKeyFromP12File(new                                                         java.io.File(SERVICE_ACCOUNT_PKCS12_FILE_PATH)).build();

    directoryService = new Directory.Builder(httpTransport,jsonFactory, credential).setApplicationName("gdirectoryspring").build();

 } catch(Exception e){
   ErrorHandler.errorHandler(this.getClass().getName(), e);
 }
 return directoryService;
}

以下是更新用户代码

Directory directoryService = getDirectoryService("adminEmailAddress");
User user = directoryService.users().get("userPrimaryEmail").execute();
       List<UserOrganization> organizaionList = user.getOrganizations();
       for (int j = 0; j < organizaionList.size(); j++)
       {
         UserOrganization singleOrg = organizaionList.get(j);
         if (singleOrg != null)
         {
          if ("work".equalsIgnoreCase(singleOrg.getCustomType()) ||singleOrg.getPrimary() != null)  
  {
  if (singleOrg.getTitle() != null)
  { 
    singleOrg.setTitle(jobTitle);
   }
  }
 }
  user.setOrganizations(organizaionList);
}

       Update update= directoryService.users().update(primaryEmail, user);
       User userUpdated = update.execute();

并且在管理控制台中我增加了我的限制,如下所示

Admin SDK   10.0 requests/second/user

但直到我超出用户速率限制 Excepiton。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

您缺少指数退避。 请看这里的示例(它用于驱动但可以调整) 在https://developers.google.com/drive/handle-errors#implementing_exponential_backoff,你会看到它如何处理'userRateLimitExceeded'等错误