我有一个带有简单测试代码的函数,例如:
exports.helloPubSub = (event, context) => {
const message = event.data
? Buffer.from(event.data, 'base64').toString()
: 'Hello, World';
console.log(context);
throw new Error("Fail");
};
当我向发布/订阅发布消息时,该函数失败,并且由于发布/订阅订阅的确认截止时间设置为600秒,因此我希望它在600秒后再次以相同的消息被调用。 但是,尽管云功能失败,它仍无法按预期的方式工作,就像它立即收到消息一样。
根据文档:成功执行函数后,Cloud Functions在内部对消息进行确认。
答案 0 :(得分:2)
您必须确保已启用该功能的重试。来自"Retrying Background Functions" documentation(重点是我):
Cloud Functions保证至少一次执行后台 事件源发出的每个事件的功能。但是, 默认情况下,如果函数调用因错误而终止,则 函数将不会再次调用,并且事件将被删除。 当您启用后台功能重试时,云功能将 重试失败的函数调用,直到成功完成为止,或者 重试窗口(默认为7天)到期。
通过使用gcloud命令行工具创建功能时提供--retry
选项,或通过Cloud Console创建功能时,选中“重试失败”框,即可启用重试。
当Cloud Function失败并启用重试时,它将对消息进行锁定,从而使消息成为立即重新交付的候选者。目前尚无办法推迟重新交付,尽管很快将对Pub / Sub进行更改以提供对该行为的更多控制。