Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在构建启用重试的云函数时,如何实现增量回退?_Node.js_Google Cloud Functions_Gcloud - Fatal编程技术网

Node.js 在构建启用重试的云函数时,如何实现增量回退?

Node.js 在构建启用重试的云函数时,如何实现增量回退?,node.js,google-cloud-functions,gcloud,Node.js,Google Cloud Functions,Gcloud,我正在尝试构建一个google云函数,将数据加载到API中。他们的指南展示了如何避免无限次重试()的示例,但我找不到解释如何实现增量退避的指南 如果API关闭,GCP函数似乎会尽快重试。理想的选择是随着重试次数的增加而增加延迟 有人有代码示例(节点)来实现这一点吗?如果没有编码,说明或攻击计划也会有所帮助 研究了这些文档,但没有结果。 似乎该函数总是会被强制重试。但是,您可以确保在回退间隔内调用函数的实际重要部分 只需执行以下操作: if(eventAge < 1000 &&

我正在尝试构建一个google云函数,将数据加载到API中。他们的指南展示了如何避免无限次重试()的示例,但我找不到解释如何实现增量退避的指南

如果API关闭,GCP函数似乎会尽快重试。理想的选择是随着重试次数的增加而增加延迟

有人有代码示例(节点)来实现这一点吗?如果没有编码,说明或攻击计划也会有所帮助

研究了这些文档,但没有结果。

似乎该函数总是会被强制重试。但是,您可以确保在回退间隔内调用函数的实际重要部分

只需执行以下操作:

if(eventAge < 1000 && eventAge > 0)
{
   //Do stuff
}else if (eventAge < 3000 && eventAge > 1000) {
   // Do stuff
}(...)
else{
 return;
}
if(eventAge<1000&&eventAge>0)
{
//做事
}否则如果(事件年龄<3000&&eventAge>1000){
//做事
}(...)
否则{
返回;
}

这样,您的实际代码将仅在您通过逻辑设置的时间间隔内执行。

除了您查看的官方文档之外。您可以尝试查看此文档[1],尽管它是为云物联网核心指定的。您将发现不同的示例取决于您的运行时环境。这可能有助于说明如何实现指数退避

[1]

检查文档,有一个关于截断指数退避的很好的解释

然而,更有趣的是,它指出:

Node.js的Google云客户端库可以自动使用 使用autoRetry参数重试请求的回退策略

因此,挖掘任何随机的
@googlecloud
库并寻找该选项,我们将直接处理退休人员


由于该代码在下,我假设您可以复制该代码片段,只要您遵守许可证限制。

暂停从何而来?这是否会持续重新运行功能,直到满足计时条件?我曾考虑在函数中添加超时,但这似乎效率低下。我想如果我能将重试次数传递给下一个电话,这可能会奏效。是的,这就是我的想法。只要您的实际逻辑在重试块中,您就不必担心实际代码的无限重试。只要谷歌愿意,就让它重试。lolSetTimeout可以工作,但是如果函数在其他未捕获的错误上实际失败,它不会重试。实际上,这不能确保它每间隔只调用一次。函数可能会被连续调用,直到不再满足每个条件的范围。这意味着它将是这样的:第一秒钟内有5个调用…3秒后有3个调用,10秒后有7个调用,等等。虽然云函数内部管理重试频率,但不确定如何解决该问题。它将决定退避。您目前无法控制它的工作方式。因此,这指定了在调用google时如何处理它,而不是从google函数调用时如何处理它。它利用了setTimeout,这在FaaS中是一种不好的做法。更重要的是,它使用内存中的计数器进行重试,其中GCP函数关闭,然后在每次重试时重新运行。不知道如何利用这一点。
if(eventAge < 1000 && eventAge > 0)
{
   //Do stuff
}else if (eventAge < 3000 && eventAge > 1000) {
   // Do stuff
}(...)
else{
 return;
}