我正在尝试构建一个将数据加载到API中的google云函数。他们的指南显示了如何避免无限重试(https://cloud.google.com/functions/docs/bestpractices/retries#functions-tips-retry-node6)的示例,但我找不到一个指南来解释如何实现增量回退。
如果API关闭,GCP函数似乎会以尽可能快的速度重试。理想的选择是随着重试次数的增加而增加延迟。
有谁有代码示例(节点)来实现这一点吗?如果没有,代码、解释或攻击计划也会有所帮助。
研究了文档但无济于事。
发布于 2019-03-27 14:25:54
/**
* Background Cloud Function that only executes within
* a certain time period after the triggering event
*
* @param {object} event The Cloud Functions event.
* @param {function} callback The callback function.
*/
exports.avoidInfiniteRetries = (event, callback) => {
const eventAge = Date.now() - Date.parse(event.timestamp);
const eventMaxAge = 10000;
// Ignore events that are too old
if (eventAge > eventMaxAge) {
console.log(`Dropping event ${event} with age ${eventAge} ms.`);
callback();
return;
}
// Do what the function is supposed to do
console.log(`Processing event ${event} with age ${eventAge} ms.`);
callback();
};
似乎该函数总是会被强制重试。但是,您可以确保在回退间隔内调用函数的实际重要部分。
只需执行以下操作:
if(eventAge < 1000 && eventAge > 0)
{
//Do stuff
}else if (eventAge < 3000 && eventAge > 1000) {
// Do stuff
}(...)
else{
return;
}
这样,您的实际代码将只在您通过逻辑设置的时间间隔内执行。
发布于 2019-03-27 21:51:04
除了您所查看的官方文档之外。你可以试着看看这篇文档1,尽管它是为云IoT核心指定的。你会发现不同的例子取决于你的运行时环境。这可能有助于说明如何实现指数退避。
发布于 2019-04-22 02:11:26
查看GCS的文档,有一个关于截断指数回退的很好的解释。
然而,更有趣的是,它声明:
Node.js的
Google Cloud客户端库可以自动使用回退策略来重试带有autoRetry参数的请求。
因此,在任何随机的@google-cloud
库中挖掘并寻找该选项,我们得到的是处理退役的this piece of code。
因为这些代码是在Apache License 2.0下编写的,所以我假设您可以复制这段代码,只要您遵守许可证限制。
https://stackoverflow.com/questions/55379382
复制