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

Gmail API-超过速率限制[429],后端错误[500]

严兴旺
2023-03-14

我们有一个使用Gmail API访问Gmail中电子邮件的应用程序。

我们随机得到以下错误消息

谷歌。API。请求。RequestError Rate Limit Excessed[超过429]错误[消息[超过速率限制]位置[-]原因[超过速率限制]域[使用权限]]

然后我们在错误事件代码中重试,并得到

谷歌。API。请求。RequestError后端错误[500]错误[消息[后端错误]位置[-]原因[后端错误]域[全局]]

然后,我们在错误事件代码中重试(我们尝试了3次),并按预期工作。

这里的Gmail API后端有一些问题。我们正在制作

还有其他人遇到这种奇怪的行为吗?

下面是正在调用的代码

 UsersResource.MessagesResource.GetRequest gr = gs.Users.Messages.Get(emailAccount, msgId);
 {
        gr.Format = UsersResource.MessagesResource.GetRequest.FormatEnum.Raw;
        Message m = new Message();
        try
        {
            m = gr.Execute();
        }
 }

共有2个答案

晋言
2023-03-14

如果有人想知道为什么他们的速率会受到限制,那么也要知道带宽限制大约为750mb/小时或2500mb/天。此限制在连接到该用户帐户的所有应用程序(IMAP、POP、API)之间共享。我相信,即使是Gmail的使用也会影响这一点。如果其他应用程序正在消耗用户配额,您的应用程序将收到相同的速率限制。

微生德运
2023-03-14

Gmail API具有相同的每日使用限制,适用于应用程序发出的所有请求,以及每个用户的速率限制。

  • 每日使用量1,000,000,000配额单位/用户费率限制
  • 每秒每个用户250个配额单位,移动平均值(允许短脉冲)

超过速率限制(变快)将导致HTTP 403或HTTP 429请求响应过多,您的应用程序应通过指数后退重试来响应。

500个错误是服务器打嗝,服务器需要很长时间才能响应,因此它超时了您的请求。此解决方案与上述错误的解决方案相同,您应该实施指数退避并重试。

指数退避是网络应用程序的一种标准错误处理策略,在这种策略中,客户端会在不断增加的时间内定期重试失败的请求。如果大量请求或繁重的网络流量导致服务器返回错误,那么指数退避可能是处理这些错误的好策略。相反,它不是处理与速率限制、网络容量或响应时间无关的错误的相关策略,例如无效的授权凭据或未找到文件的错误。

如果使用得当,指数退避可以提高带宽使用效率,减少获得成功响应所需的请求数,并最大限度地提高并发环境中请求的吞吐量。

实现简单指数退避的流程如下所示。

  1. 向API发出请求
  2. 接收具有可重试错误代码的错误响应
  3. 等待1srandom_number_milliseconds秒
  4. 重试请求
  5. 接收具有可重试错误代码的错误响应
  6. 等待2srandom_number_milliseconds秒
  7. 重试请求
  8. 接收具有可重试错误代码的错误响应
  9. 等待4srandom_number_milliseconds秒
  10. 重试请求
  11. 接收具有可重试错误代码的错误响应
  12. 等待8srandom_number_milliseconds秒
  13. 重试请求
  14. 接收具有可重试错误代码的错误响应
  15. 等待16秒random_number_milliseconds秒
  16. 重试请求
  17. 如果您仍然收到错误,请停止并记录错误。
 类似资料:
  • 在我的jenkins工作中,我得到这个错误为我的bot用户。我的限制是5000,我看到每秒钟大约有100个请求,我不确定哪个工作/服务正在使用机器人的请求。理想情况下,我的其他jenkins工作应该每分钟最多占用1个请求。 有没有办法找出是什么导致了如此高的请求率?或者任何API调用来列出在最后一分钟内进行的所有API调用或类似的东西?

  • 我们正在使用Google的Admin SDK API。当我们执行超过2个线程向谷歌服务器发出批量请求时,我们会遇到很多403(超过速率限制)错误。 我们在项目管理面板中更改了每秒请求的速率限制,但似乎没有效果。正如谷歌在https://developers.google.com/admin-sdk/directory/v1/limits我们已尝试使用每个线程一个用户的凭据。 我们每秒可以发送多少个

  • 我检索用户的照片使用管理sdk在java。我也实现了指数退避。 但在几次请求之后,我得到了403个错误代码和速率受限的异常消息。 有2000名用户和10至20名用户的照片。它开始给出403错误,并使用指数回退,这需要很长时间才能执行。 有人能给我一些关于这个问题的建议吗。?

  • 我有一个java Spring应用程序在AWS C4上运行。大(4 Gb内存)与Apache Tomcat 8.我得到java.lang.OutOfMemoryError GCOverhead限制超过错误,同时在服务器启动期间实例化30000条记录的bean。 引起原因:org.springframework.beans.BeanInstantiation异常:未能实例化[java.lang.字符

  • 我正在使用quarkus.rest客户端调用外部API,并希望将这些调用的频率限制在每秒50次,这样我就不会淹没外部服务。在没有侧车方法的情况下(通过代码),推荐的实现方法是什么?

  • 我正在使用SpringWebFlux和netty构建一个微服务。在内部,我使用web客户端进行RESTAPI调用。如何控制通过webclient调用RESTAPI的速率?我猜backnpressure只适用于单个请求/回复,不适用于对我的微服务的多个请求。Amy pointers将不胜感激。谢谢