【问题标题】:Google App Engine Node Task Queue Retries before FinishedGoogle App Engine 节点任务队列在完成前重试
【发布时间】:2019-08-31 12:23:36
【问题描述】:

我正在通过云任务队列运行缓慢的操作,以从 Google 云存储中删除对象。我注意到任务队列在两分钟后重试任务,即使正在运行的任务还没有完成也没有出错。

触发有效重试但在任务仍在运行时不重试的最佳策略是什么?

这是我的任务创建者:

router.get('/start-delete-old', async (req, res) => {
  const task = {
    appEngineHttpRequest: {
      httpMethod: 'POST',
      relativeUri: `/videos/delete-old`,
    },
  };

  const request = {
    parent: taskClient.parent,
    task: task,
  };

  const [response] = await taskClient.queue.createTask(request);
  res.send(response);
});

这是我的任务处理程序:

router.post('/delete-old', async (req, res) => {
  let cameras = await knex('cameras')
  let date = moment().subtract(365, 'days').format('YYYY-MM-DD');
  for (let i = 0; i < cameras.length; i++) {
    let camera = cameras[i]
    let prefix = `${camera.id}/${date}/`
    try {
      await bucket.deleteFiles({ prefix: prefix, force: true })
      await knex.raw(`delete from videos where camera_id = ${camera.id} and cast(start_time as date) = '${date}'`)
    }
    catch (e) {
      console.log('error deleting ' + e)
    }
  }
  res.send({});
});

【问题讨论】:

    标签: node.js google-app-engine


    【解决方案1】:

    根据文档,任务中的 timeout 可能因您使用的环境而异:

    标准环境

    • 自动缩放:任务处理必须在 10 分钟内完成。

    • 手动和基本扩展:请求最长可以运行 24 小时。

    灵活的环境

    • 对于在 flex 环境中运行的工作器服务:所有类型都有 60 分钟的超时时间。

    因此,如果您的处理程序错过了最后期限,队列将假定任务失败并重试。

    此外,任务队列预计会收到 200 到 299 之间的状态码,如果没有,它将假定正在运行的任务将失败。引用documentation

    成功完成处理后,处理程序必须将 200 到 299 之间的 HTTP 状态代码发送回队列。任何其他值表示任务失败,队列重试任务。

    我相信存储桶删除文件和 knex 原始查询都需要大量时间来处理,这导致处理程序返回 200-299 以外的状态。

    解决问题的一个好方法是使用 Stackdriver 日志,您将能够收集有关正在进行的进程的更多信息,并查看其中是否有任何返回错误。

    【讨论】:

    • 感谢您的回复。我阅读了该文档,并且任务在 2 分钟后重新启动(在发送任何响应之前)。我通过查看堆栈驱动程序日志确认了这一点。 2 分钟的最后期限是我没有找到任何文档的部分。
    • @user1527312 感谢您的回复!那么这肯定是出乎意料的事情,为了能够进一步帮助您,您能否在以下link 中创建一个问题。只有您和来自 Google 的人员才能看到此链接,因此不必担心在此处分享您的项目 ID。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多