microsoft-graph-api - 打开 Microsoft Graph API 的并发连接过多

标签 microsoft-graph-api

我目前正在运行一个使用 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,我们会删除电子邮件正文,然后将邮件移至文件夹 BJunk 文件夹上的订阅也会删除正文并将其发送到文件夹 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/

相关文章:

javascript - 是否有将用户生日设置为 null、空或默认值的解决方案?

c# - 无法使用 GraphServiceClient 创建具有应用程序身份的在线 session

microsoft-graph-api - 将图形消息保存到 .MSG 或 .EML 文件中

office365 - 使用 Microsoft OneDrive API/SDK 的客户端分页

tabs - Microsoft Teams Graph API : Add Tab to teams channel API failing in V1. 0 但适用于内置选项卡类型的 Beta 版

azure - 我可以使用一个访问 token 访问多个 API 吗?

oauth-2.0 - Microsoft Graph API 的访问 token 立即过期

java - 无法使用 Java SDK 将文件上传到 OneDrive

c# - 使用 Microsoft Graph 查询 AzureAD Graph 扩展属性

oauth-2.0 - 为什么我可以在 Microsoft 身份平台 AAD v 2 上使用具有某些权限/范围的短名称?