Превышен предел скорости администратора SDK 403

Я получаю фотографии пользователя с помощью администратора SDK в Java. Я также реализовал экспоненциальный откат.

Но после нескольких запросов я получаю код ошибки 403 с сообщением об исключении с ограниченной скоростью.

Есть 2000 пользователей и после 10 до 20 фото пользователя. Он начинает выдавать ошибку 403 и, используя экспоненциальный откат, занимает много времени.

   try {
        Directory directoryService = getDirectoryService(adminEmail);
        Photos photos = directoryService.users().photos();
        com.google.api.services.admin.directory.Directory.Users.Photos.Get get = photos.get(userEmail);
        get.setUserKey(userEmail);
        UserPhoto userPhoto = get.execute();

    } catch (Exception e) {

         if(e.getMessage().contains("403"))
         {
            try {
                 Thread.sleep((1 << userCount) * 1000 + randomGenerator.nextInt(1001));
            } catch (InterruptedException e1) {
                e1.printStackTrace();
                log.warning("Exception Interrupted in getting photo1::->"+e1.getCause());
            }
        }
    }

Кто-нибудь может дать мне предложения по этому вопросу.?

1 ответ

Решение

Ах, я нашел проблему. Ограничение скорости связано с тем, что вы запрашиваете новый токен доступа OAuth2 для каждого запроса. Вам нужно кэшировать результат Directory directoryService = getDirectoryService(adminEmail) вместо того, чтобы делать это каждый запрос.

Под node.js мои токены хороши в течение одного часа (они содержат expires_in поле, которое является меткой времени Unix). Я изменил свой код так, чтобы запрашивать новый токен только в течение 300 секунд после его истечения, и теперь я могу выполнять все отлично, со скоростью 10 в секунду, что более чем достаточно, чтобы достичь дневного лимита в 150 000 запросов в день.

Другие вопросы по тегам