我检索用户的照片使用管理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());
}
}
}
有人能给我一些关于这个问题的建议吗。?
啊,我发现问题了。速率限制是因为您为每个请求请求一个新的OAuth2访问令牌。您需要缓存目录directoryService=getDirectoryService(adminEmail)的结果,而不是每次请求都这样做。
在节点下。js,我的令牌可以使用一小时(它们在字段中包含一个expires\u,它是unix时间戳)。我修改了我的代码,只在新令牌到期后300秒内请求一个新令牌,现在我可以以每秒10次的速度很好地完成任务,这一速度足以达到每天150000次请求的上限。
在我的jenkins工作中,我得到这个错误为我的bot用户。我的限制是5000,我看到每秒钟大约有100个请求,我不确定哪个工作/服务正在使用机器人的请求。理想情况下,我的其他jenkins工作应该每分钟最多占用1个请求。 有没有办法找出是什么导致了如此高的请求率?或者任何API调用来列出在最后一分钟内进行的所有API调用或类似的东西?
我们正在使用Google的Admin SDK API。当我们执行超过2个线程向谷歌服务器发出批量请求时,我们会遇到很多403(超过速率限制)错误。 我们在项目管理面板中更改了每秒请求的速率限制,但似乎没有效果。正如谷歌在https://developers.google.com/admin-sdk/directory/v1/limits我们已尝试使用每个线程一个用户的凭据。 我们每秒可以发送多少个
速率限制配置参考 filter.http.RateLimit filter.http.RateLimit proto { "domain": "...", "stage": "...", "request_type": "...", "timeout": "{...}" } domain (string, REQUIRED) 需要调用速率限制服务时的域。 stage (uint3
速率限制配置参考。 filter.network.RateLimit filter.network.RateLimit proto { "stat_prefix": "...", "domain": "...", "descriptors": [], "timeout": "{...}" } stat_prefix (string, REQUIRED) 发布统计信息时使用的前缀。
速率限制配置概述。 { "name": "rate_limit", "config": { "domain": "...", "stage": "...", "request_type": "...", "timeout_ms": "..." } } domain (required, string) 调用速率限制服务时使用的域。 stage (opt
速率限制配置参考。 { "name": "ratelimit", "config": { "stat_prefix": "...", "domain": "...", "descriptors": [], "timeout_ms": "..." } } stat_prefix (required, string) 发布统计信息时使用的前缀。 domai