google-calendar-api - Google Calendar API - 更深入地了解日历使用限制超出错误
问题描述
我有一个自 2015 年以来一直在运行的应用程序。它使用 Google node.js 库(日历 v3 API)通过服务帐户读取和写入大约 16 个日历。我们还有 G Suite 教育版。
一般流程是:
- 每 30 秒,它通过列表操作缓存所有日历数据
- 学生会定期请求预约“插槽”,它首先检查插槽是否仍然打开(通过列表调用)然后插入。
这就是它所做的一切。它一直运行良好,直到过去几天 APIinsert
调用开始失败:
{
"code": 403,
"errors": [{
"domain": "usageLimits",
"reason": "quotaExceeded",
"message": "Calendar usage limits exceeded."
}]
}
这并不是那么特别 - 文档有三个“解决方案”:
- 在 G Suite 管理员帮助中阅读有关日历使用限制的更多信息。
- 如果一个用户代表 G Suite 域的多个用户发出大量请求,请考虑使用具有权限委派的服务帐户(设置 quotaUser 参数)。
- 使用指数退避。
- 据我所知,我没有超过任何规定的限制。
- 当我使用服务帐户时,它不会代表用户发出请求。服务帐户对日历具有写入权限并将用户添加为与会者
- 最后,我不认为指数退避会有所帮助,尽管我没有实现这一点。插入请求和下一次插入调用之间的时间以秒为单位,而不是毫秒。此外,仅使用简单脚本直接在命令行上运行调用也会产生相同的问题。
一些统计数据:
2015 - 2,466 inserts, 186 errors
2016 - 25,747 inserts, 237 errors
2017 - 42,815 inserts, 225 errors
2018 - 41,390 inserts, 1,074 errors (990 of which are in the past 3 days)
这些年来我已经更新了代码,但是这个学期它基本上没有受到影响。
在这一点上,我不确定该怎么做 - 没有联系 Google 的渠道,虽然我没有实施退避策略,但计时与此应用程序一起工作的方式,随后的调用会延迟几秒钟,并在队列中处理顺序处理请求。唯一的并发请求是列表操作。
解决方案
推荐阅读
- c# - .NET Core 运行时错误:无法翻译 LINQ 表达式
- api - 如何通过 /v1/Customer API 访问 Magento 扩展的属性?
- c# - 如何使用文本文件读取在 ADO.Net 中可编辑的仅选择查询
- javascript - Azure 功能不接受在远程创建文件
- javascript - Div 有不同的高度,它们从哪里继承高度?
- node.js - 为什么 Chrome 不在生产中设置 cookie
- html - 防止无序列表引起的“换行符”
- javascript - React @redux/toolkit 在状态更新时不会重新渲染组件
- dynamics-crm - Dynamics crm + 插件代码,用于跨实体集合存储总和公式
- sql - SQL/Presto:如何在 ds 上获取项目开始时间的累积总和