office365 - 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 错误,但要少得多。
解决方案
这里有关于邮箱限制的具体指导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的更改
推荐阅读
- reactjs - 如何在功能组件中使用 PanResponder?
- maven - 将属性文件转换为抽象类
- oracle - 如果 oracle table1 为空,则输出 table2 否则输出 table1 本身;两个表上没有共同的列
- c++ - 如何在文件中更新
- javascript - Nativescript-vue 溢出对于边界外的绝对定位元素可见
- android - Mockito,@Mock 真正反对什么
- javascript - 有人可以解释为什么当我按下回车键时什么都没有发生吗?
- android - 混淆 Firestore NullPointerException 或 android.view.View android.view.View.findViewById(int) null 对象引用
- sql - 如果不满足条件,如何默认为 SQL 中的值以用于连接
- python - 大多数pythonic方法来更改存储在两个列表中的变量