打开Microsoft Graph API

时间:2017-12-13 20:30:15

标签: microsoft-graph

我目前正在运行使用Microsoft Graph的API的网络应用程序,我们今天遇到以下消息,这对我们的应用程序造成了一整天的严重影响:

"error": {
    "code": "ErrorTooManyObjectsOpened",
    "message": "Too many concurrent connections opened., The process failed to get the correct properties.",
    "innerError": {
        "request-id": "removed",
        "date": "2017-12-13T17:01:14"
    }
}

请注意,请求ID已被删除

让我总结一下我们的Web应用程序的功能。

基本上,我们有2个我们积极订阅的电子邮件文件夹,JunkFolder A

如果有任何内容点击Folder A,我们会删除电子邮件的正文,然后将邮件移至Folder B。我们的Junk文件夹上的订阅也会剥离正文并将其发送到Folder B

有时webhook订阅服务会跳过可能同时发生的消息,因此我们的服务器中有2个cron作业运行脚本并每5分钟检查Junk/Folder A是否有任何消息,因此我的假设是cron作业每天运行大约288*2次。不计算我们对文件夹的订阅,我们通常每天收到大约200-300封电子邮件。

不幸的是,Microsoft的Graph错误代码页面没有向我们提供有关此代码的任何说明。如果有人能解释这意味着什么,以及如何避免它发生,我将非常感激。

2 个答案:

答案 0 :(得分:2)

发生这种情况是因为您的应用程序超出了限制阈值。

有几种不同的限制指标可能会影响Microsoft Graph请求。有关高级概述,请参阅Microsoft Graph throttling guidance。由于在这种情况下您通过图表访问Exchange Online,因此您可以在Exchange文档中找到What throttling values do I need to take into consideration?中的更多特定信息。

在架构上,您正在对API进行大量不必要的调用。您应该只使用webhook订阅和/delta端点,而不是同时订阅预定作业。

/delta端点的每次调用都会为您提供一个令牌,该令牌可用于获取自最初发出令牌以来对给定资源的任何更改。因此,无论是否有1封电子邮件或1000封,您只会收到新的电子邮件。

使用/delta查找更改后,您只能将webhook用作“触发器”。收到webhook后,您可以忽略内容,而是向/delta发出请求。这可确保您捕获每个传入的电子邮件,即使您未必收到单独的webhook通知。

答案 1 :(得分:0)

有一个错误。在发出500条消息移动请求后,发生“无法复制/移动错误”。随后,出现“429:打开的并发连接太多”错误。大多数应用程序错过了第一个错误,因为之后您不断收到429错误。

如果您让应用程序“休息”30分钟,则油门会自行重置,您可以继续操作。我认为击中500次动作没有时间限制。我的应用程序在6.5小时后完成了500次移动,然后我们开始收到错误。

而且,如果您在休息30分钟之前继续尝试移动呼叫,它永远不会重置。此外,在响应中,retry-after为null ...因此,这对您没有帮助。

如果您找到了解决方法,请告诉我。我们正在尝试设置类别,然后手动移动消息。我也正在调查制定规则,为我们或其他工作移动它们。我找不到从Graph API执行规则的方法。

有关详细信息,请参阅此链接。此外,报告此问题的人越多,希望能越早得到解决。 Outlook API Throttling documentation #144