上周在我们的夜间批处理中第一次遇到速率限制超过错误(4003)。此批处理过程是将Smartsheet对象与我们的TimeTracking应用程序4TT同步。
自2016年以来,这个过程工作正常,但现在不知怎的,这个速率限制错误发生,因此停止同步。在API(以及有关速率限制的博客)的帮助下,我设法更改了代码,在发生此错误时暂停。这花了我很多时间,因为每次在同步过程的不同部分发生错误。
当速率限制即将超过而不是每次都更改代码时,是否存在或者是否有办法让API自动暂停。对于那些不想要这个功能的人,例如添加一个可选的布尔参数' AutomaticallyPauseWhenRateLimitExceeds' (默认为false)与Smartsheet API建立连接时?
答案 0 :(得分:0)
您需要在代码中包含逻辑以有效处理速率限制错误 - Smartsheet API无法为您自动处理此情况。
一种简单的方法是在代码中包含逻辑,这样当引发速率限制错误时,代码会在继续执行前暂停执行60秒。或者,更复杂的方法是在代码中实现exponential backoff逻辑(一种错误处理策略,您可以定期重试失败的请求,重试之间的等待时间逐渐延长,直到请求成功或一定次数的重试尝试达成了。)
如果您的代码以有效的方式构建(即,错误处理逻辑封装在一个位置),那么实现这种类型的错误处理逻辑应该不困难或乏味。
其他说明:Smartsheet API Best Practices博文(特别是实用:遵守速率限制指南部分)包含有关此主题的信息。
答案 1 :(得分:0)
我们所有的SDK都包含错误重试。所以这是处理这种情况的最简单方法。 http://smartsheet-platform.github.io/api-docs/#sdks-and-sample-code
答案 2 :(得分:0)
在更新工作表时,我发现了这个问题和其他有趣的问题(在我的实验室中),包括不良的Internet连接/带宽问题。
如果无法容纳您的代码来处理数据块,我的建议是使用简单的Try / Catch逻辑将线程/任务暂停60秒,然后重试。
using System.Threading
...
... //all your code goes here
...
try
{
// your code to Save/update the Sheet goes here
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Thread.Sleep(60000);
}
下一步是在发生这些错误时进行通知