【问题标题】:Retry Google Cloud function on arbitrary interval以任意间隔重试 Google Cloud 功能
【发布时间】:2019-11-02 03:17:54
【问题描述】:

我有一个 Google Cloud 应用,其中包含多个调用 API 的云函数,然后将响应保存在 Firebase 中。我设置了这个预定的函数来重试错误的 API,它工作得很好。但如果我需要的数据还不存在,我想重试呼叫。如果我抛出错误,立即再次调用可能会起作用,但丢失的数据不太可能在几秒钟后可用,所以我宁愿在那之后每小时检查一次,直到我有有效的数据。

以下是我的函数的简化版本。我可以想象添加一个 setTimeout 并让函数再次调用自身,但我不确定我会这样做,或者这是一个好主意,因为它会使函数长时间保持活动状态。有没有办法在任意时间间隔内自动重试这个预定的功能?

exports.fetchData= functions.pubsub
    .schedule('every Tuesday 6:00')
    .timeZone('America/New_York')
    .onRun(async context => {
            const response =  fetch(...)
            .then(res => {
                if (res.status < 400) {
                    return res;
                } else {
                    throw new Error(`Network response was not ok. ${res}`);
                }
            })
            .then(res => res.json());

        const resObj = await response;

        resObj.map(x => {
            // check response for valid data
        })

        if (// data is valid) {
          // save to Firebase 
        } else {
          // retry in 1 hour
        }
    });
});

【问题讨论】:

    标签: firebase google-cloud-platform google-cloud-functions


    【解决方案1】:

    计划函数仅按您指定的计划运行。没有“任意”的调度。如果您认为该函数可能经常失败,请考虑增加调度频率,并避免因最近成功而无需运行的函数调用。

    如果您 enable retries,并且该函数通过引发异常、返回被拒绝的承诺或超时来生成错误,则 Cloud Functions 将按照您无法控制的计划自动重试该函数。

    setTimeout 不是使函数保持活动时间超过其配置的超时时间的可行选项。 Cloud Functions 将在超时到期后终止该函数及其所有正在进行的工作(并且您将支付该函数处于空闲状态的时间,这有点浪费)。

    【讨论】:

      猜你喜欢
      • 2013-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 2018-10-04
      相关资源
      最近更新 更多