我已经从Pub / Sub主题创建了Cloud Function,如果函数失败,是否应该重试从pub / sub传递消息?

时间:2020-06-02 10:06:44

标签: google-cloud-platform google-cloud-functions publish-subscribe google-cloud-pubsub

我有一个带有简单测试代码的函数,例如:

    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在内部对消息进行确认。

1 个答案:

答案 0 :(得分:2)

您必须确保已启用该功能的重试。来自"Retrying Background Functions" documentation(重点是我):

Cloud Functions保证至少一次执行后台 事件源发出的每个事件的功能。但是, 默认情况下,如果函数调用因错误而终止,则 函数将不会再次调用,并且事件将被删除。 当您启用后台功能重试时,云功能将 重试失败的函数调用,直到成功完成为止,或者 重试窗口(默认为7天)到期。

通过使用gcloud命令行工具创建功能时提供--retry选项,或通过Cloud Console创建功能时,选中“重试失败”框,即可启用重试。

当Cloud Function失败并启用重试时,它将对消息进行锁定,从而使消息成为立即重新交付的候选者。目前尚无办法推迟重新交付,尽管很快将对Pub / Sub进行更改以提供对该行为的更多控制。