首页 > 解决方案 > Microsoft Graph API 返回 503/504 错误

问题描述

我正在使用 Microsoft 的 Graph API Java 客户端从 Office365 获取消息。查询跨越一整年。它们限制为每页 50 个结果,并使用返回的下一页 URL 进行进度。它每 5 分钟定期执行一次,但每个作业不超过 2 分钟(迭代下一个 url)。

偶尔我会收到 503 Service Unavailable / 504 Gateway Timeout。一旦发生这种情况,请求将无法继续,并将继续遇到这些错误。

根据微软的文档,这应该被视为过多的请求,并延迟回退。发生这种情况时没有 Retry-After 标头。我注意到缩小时间范围并重新启动查询有时会有所帮助。我也在 Stackoverflow 上看到过这个问题,但没有解决方案。

我想知道一年的查询太多了,即使有分页?除了退缩之外,还有什么解决方案的想法,以及持续多长时间?

谢谢

失败的示例查询:

https://graph.microsoft.com/v1.0/me/messages?$filter=IsDraft+eq+false+and+ReceivedDateTime+ge+2019-03-28T20%3a08%3a51.929Z+and+ReceivedDateTime+lt+2020-02-20T19%3a48%3a37Z&$orderby=ReceivedDateTime+desc&$expand=SingleValueExtendedProperties(%24filter%3did+eq+%27String+0x7D%27)&$select=conversationId%2cchangeKey%2csentDateTime%2creceivedDateTime%2cisRead%2chasAttachments%2cinternetMessageHeaders%2csender%2cfrom%2ctoRecipients%2cccRecipients%2cbccRecipients%2csubject%2cinternetMessageId%2cparentFolderId&$top=50&$skip=51

编辑:在发送更多请求之前等待一个小时似乎没有帮助。看起来问题出在大请求上。

编辑#2:有助于减少错误数量的方法是filter=IsDraft+eq+false从查询字符串中删除部分,并在客户端过滤草稿。我仍然偶尔会遇到 503 错误,但要少得多。

标签: office365microsoft-graph-apioutlook-restapimicrosoft-graph-mail

解决方案


这里有关于邮箱限制的具体指导https://docs.microsoft.com/en-us/graph/throttling#outlook-service-limits它们基于单个用户邮箱。因此,如果您在 10 分钟内调用超过 10,000 个 API 请求或在超过 4 个并发进程中调用它,您可能会遇到这个问题。

但是,您没有收到 429 响应,这将假定您没有受到服务的限制。

所以我更了解你的问题,如果你每 5 分钟运行一次,你为什么要回去一整年?通过添加该数据范围,这是一个更复杂的查询。您可以使用 Delta 查询来获取自最后 5 分钟以来草稿文件夹https://docs.microsoft.com/en-us/graph/delta-query-overview的更改


推荐阅读