Превышен предел скорости администратора 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 запросов в день.