我正在尝试构建将数据加载到API的Google云功能。他们的指南显示了有关如何避免无限重试(https://cloud.google.com/functions/docs/bestpractices/retries#functions-tips-retry-node6)的示例,但是我找不到指导说明如何实现增量退避的指南。
如果API掉线,则GCP函数似乎会尽快重试。理想的选择是随着重试次数的增加而增加延迟。
有人有代码示例(节点)来实现吗?如果没有编写代码,则说明或制定攻击计划也将有所帮助。
对文档进行了无济于事的搜索。
答案 0 :(得分:1)
/**
* 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;
}
这样,您的实际代码将仅在通过逻辑设置的间隔内执行。
答案 1 :(得分:0)
除了您查看的官方文档之外。即使为Cloud IoT Core指定了文档,您也可以尝试查看本文档[1]。您会发现取决于运行时环境的不同示例。这可能有助于说明如何实现指数补偿。
[1] https://cloud.google.com/iot/docs/how-tos/exponential-backoff
答案 2 :(得分:0)
检查文档中的GCS,有一个关于截断指数补偿的很好的解释。
但是,更有趣的是,它指出:
Node.js的Google Cloud Client库可以自动使用 后退策略,以使用autoRetry参数重试请求。
因此,在任何随机的@google-cloud
库中进行挖掘并寻找该选项,我们将直接转到this piece of code处理退休事宜。
由于该代码位于Apache License 2.0下,因此我假设您只要遵守许可限制,就可以复制该代码段。