【发布时间】: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({});
});
【问题讨论】: