使用Gmail API“500后端错误” - 可以安全重试吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Gmail API“500后端错误” - 可以安全重试吗?相关的知识,希望对你有一定的参考价值。
我正在通过Gmail API发送邮件。特别是,我试图在大约2秒内从同一个帐户向不同的用户(每个1个)发送5-7封电子邮件。
这些电子邮件中约有8%因此错误而失败:
&googleapi.Error{
Code:500,
Message:"Backend Error", Body:`{
"error": {
"errors": [
{
"domain": "global",
"reason": "backendError",
"message": "Backend Error"
}
],
"code": 500,
"message": "Backend Error"
}
}`,
Header:http.Header(nil),
Errors:[]googleapi.ErrorItem{
googleapi.ErrorItem{Reason:"backendError", Message:"Backend Error"}
}
}
它似乎不是特定于特定帐户,因为6/7电子邮件可能会成功。
由于害怕向同一个人发送2封电子邮件,我对重试这一点犹豫不决。
有没有办法判断此消息是否可以重试?
“code”:500,“message”:“后端错误”
基本上是Google服务器的问题。您正在进行的请求需要很长时间,或者预先形成请求的服务器正忙,请求再次花费很长时间。这听起来不像你正在做的应该导致问题。
不运行的提示:不要在你完成的时间内运行,每个设置了cron作业的人也不要在午夜(PDT)运行,因为这是重置配额的时候,你将再次与所有人一起完成吹掉了昨天的配额。
解:
正常的解决方案是等待几秒钟,然后再次发送相同的请求。 (实施Exponential Backoff)
实现简单指数退避的流程如下。
- 向API发出请求
- 收到具有可重试错误代码的错误响应
- 等待1s + random_number毫秒秒
- 重试请求
- 收到具有可重试错误代码的错误响应
- 等待2s + random_number_milliseconds秒
- 重试请求
- 收到具有可重试错误代码的错误响应
- 等待4s + random_number毫秒秒
- 重试请求
- 收到具有可重试错误代码的错误响应
- 等待8s + random_number毫秒秒
- 重试请求
- 收到具有可重试错误代码的错误响应
- 等待16s + random_number_milliseconds秒
- 重试请求
如果仍然出现错误,请停止并记录错误。
有时可以在发送之前发生,有时也可以在发送之后
我从五个不同的电子邮件尝试中记录了“收件人”和“发件人”,这些邮件都收到了500个后端错误。这些尝试都没有进入我的收件箱的“已发送”文件夹。我得出结论,他们从未被发送过,重试这些消息是安全的。但是,评论中的其他人(见下文)表明这些消息实际上已经发送到远程邮箱,并且重试是不安全的。
以上是关于使用Gmail API“500后端错误” - 可以安全重试吗?的主要内容,如果未能解决你的问题,请参考以下文章
我可以使用gmail api和c#从gmail中读取消息吗?
作为发件人,使用 API 或标头,是不是可以检测电子邮件是不是使用 Gmail 的“计划发送”发送?