我有一个脚本,可以从Office 365邮箱下载邮件。在该脚本的日志中,我注意到许多关于此错误Response: 504, Gateway Timeout
的响应。该错误每周在某些偶然的时间发生几次。这是最近几次发生的时事:
其余时间,脚本可以完美运行而不会出错。 documentation状态是此错误代码表示:
“服务器在充当代理的同时未及时收到 尝试访问上游服务器时需要访问的响应 完成请求。可能与503一起出现。”
我还看到了其他一些有关此的文章,但是他们都没有真正提供有关为什么发生此错误或可以避免该错误的解释。如果服务器响应超时,这是否意味着我需要更改请求?现在,我正在使用@odata.nextLink
响应参数以1000个数据块的形式请求消息,以请求下一个数据块。
答案 0 :(得分:1)
504
很可能是由您的页面大小引起的。 1000
是一个庞大的页面,请求很可能会超时,试图一次获取那么多电子邮件(尤其是电子邮件本身很大时)。
Microsoft Graph是一个API聚合器,在幕后,它将每个传入请求中继到一个或多个基础API。在这种情况下,它会将请求代理到Exchange / Outlook API。
页面大小为1000
时,Graph必须等待Exchange撰写包含1000封电子邮件的响应,然后将其传递回Graph进行最终处理(Graph重写,过滤和合并API响应,这样您就可以获得一致的OData,无论您点击了哪个端点)。 504 - Gateway timeout
异常表示图在基础工作负载返回结果之前已超时。
使用较小的页面大小(通常为100-300)应该确保基础工作负载在超时之前可以响应。有些人试图一次减少100个,直到被淘汰为止,但我不推荐这种方法,因为它不可避免地意味着您还没有解决问题,只是引入了一种罕见的比赛条件。