【问题标题】:Graph Mail API: 504 Gateway Timeout Errors图形邮件 API:504 网关超时错误
【发布时间】:2018-12-06 14:42:44
【问题描述】:

我有一个从 Office 365 邮箱下载邮件的脚本。在脚本的日志中,我注意到很多带有此错误Response: 504, Gateway Timeout 的响应。该错误每周发生几次,有时偶尔出现。以下是最近几次发生的日期:

  • 12/05/2018 07:51:44 PM
  • 2018 年 12 月 5 日下午 5:50:58
  • 2018 年 12 月 5 日下午 3:50:54
  • 12/05/2018 03:51:01 AM
  • 2018 年 12 月 4 日下午 5:53:13
  • 11/28/2018 03:50:53 AM
  • 2018 年 11 月 22 日晚上 11:50:53

脚本的其余时间完美运行,没有错误。 documentation 状态是这个错误代码表明:

"服务器作为代理,没有及时收到 来自上游服务器的响应,它在尝试访问时需要访问 完成请求。可能与 503 一起出现。”

我看过其他一些关于此的帖子,但没有一个真正解释为什么会发生此错误,或者可以采取哪些措施来避免它。如果服务器响应超时,这是否意味着我需要更改我的请求?现在,我正在使用@odata.nextLink 响应参数请求以 1000 为单位的消息来请求下一个块。

【问题讨论】:

  • 1000 真的很大。如果将其降低到更合理的值,例如每页 100200,会发生什么变化?
  • @MarcLaFleur 我会试一试的。不过,使用这么小的一个单元不会触发“请求过多”错误吗?
  • 这取决于您发出多少请求,但只要您是 properly handling a 429 response,任何限制都不太可能导致问题。
  • @MarcLaFleur 现在已经有几个星期了,我还没有看到任何 504 错误,所以似乎更改请求的页面大小(从 1000 到 200)已经解决了这个问题。

标签: microsoft-graph-api


【解决方案1】:

504 很可能是由您的页面大小引起的。 1000 是一个巨大的页面大小,并且请求很可能在尝试一次获取那么多电子邮件时超时(特别是如果电子邮件本身很大)。

Microsoft Graph 是一个 API 聚合器,在幕后,它将每个传入请求中继到一个或多个底层 API。在这种情况下,它将请求代理到 Exchange/Outlook API。

页面大小为1000,Graph 必须等待 Exchange 编写包含 1,000 封电子邮件的响应并将其传递回 Graph 进行最终处理(Graph 重写、过滤和合并 API 响应,以便您获得一致的 OData后退,无论您击中的端点是什么)。 504 - Gateway timeout 异常意味着图形在底层工作负载可以返回结果之前超时。

使用较小的页面大小(100-300 非常典型)应确保底层工作负载能够在超时之前做出响应。有些人试图一次减少 100 个,直到他们被淘汰,但我不推荐这种方法,因为它不可避免地意味着你没有解决问题,只是引入了一个更罕见的竞争条件。

【讨论】:

    猜你喜欢
    • 2016-11-20
    • 1970-01-01
    • 2011-04-08
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    相关资源
    最近更新 更多