我目前正在运行一个使用 Microsoft Graph 的 API 的 Web 应用程序,今天我们遇到了以下消息,该消息严重影响了我们的应用程序一整天:
"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 已被删除
让我总结一下我们的网络应用程序的作用。
基本上,我们有 2 个正在积极订阅的电子邮件文件夹:垃圾邮件
和文件夹 A
。
如果有任何内容命中文件夹 A
,我们会删除电子邮件正文,然后将邮件移至文件夹 B
。 Junk
文件夹上的订阅也会删除正文并将其发送到文件夹 B
。
有时,Webhook 订阅服务会跳过可能同时出现的消息,因此我们的服务器中有 2 个 cron 作业,它们运行脚本并每 5 分钟检查一次垃圾/文件夹 A 中是否有任何消息,因此我的假设是 cron 作业每天运行大约 288*2
次。不包括我们对文件夹的订阅,我们通常每天会收到大约 200-300 封电子邮件。
不幸的是,Microsoft 的 Graph 错误代码页面没有向我们提供有关此代码的任何解释。如果有人能解释这意味着什么以及如何避免它发生,我将非常感激。
最佳答案
发生这种情况是因为您的应用程序超出了限制阈值。
有多种不同的限制指标可能会影响 Microsoft Graph 请求。有关高级概述,请参阅 Microsoft Graph throttling guidance 。由于在本例中您是通过 Graph 访问 Exchange Online,因此您可以从 What throttling values do I need to take into consideration? 找到更多具体信息。在 Exchange 文档中。
从架构上来说,您对 API 进行了大量不必要的调用。您应该仅使用 webhook 订阅和 /delta
,而不是同时拥有订阅和计划作业。端点。
对 /delta
端点的每次调用都会为您提供一个 token ,可用于获取自 token 最初颁发以来对给定资源的任何更改。因此,无论收到 1 封电子邮件还是 1,000 封电子邮件,您都只会收到新电子邮件。
使用 /delta
查找更改后,您就可以仅将 Webhook 用作“触发器”。当您收到 Webhook 时,您可以忽略内容,而是向 /delta
发出请求。这可以确保您捕获每封传入电子邮件,即使您不一定收到单独的 Webhook 通知。
关于microsoft-graph-api - 打开 Microsoft Graph API 的并发连接过多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47801634/