当前位置: 首页 > 知识库问答 >
问题:

管理sdk 403速率限制超过

羊越
2023-03-14

我检索用户的照片使用管理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个答案

东门清夷
2023-03-14

啊,我发现问题了。速率限制是因为您为每个请求请求一个新的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