Firebase:我可以在 Firebase 云功能中“不确认”一条 PubSub 消息吗?

Posted

技术标签:

【中文标题】Firebase:我可以在 Firebase 云功能中“不确认”一条 PubSub 消息吗?【英文标题】:Firebase: Can I "not acknowledge" a PubSub message inside a Firebase cloud function? 【发布时间】:2018-01-10 12:10:04 【问题描述】:

我有一个 Firebase 云函数,它通过 PubSub 消息显示为 triggered。该函数应该使用该消息或等待稍后使用它。

有没有办法从这个函数返回不确认消息,以便稍后返回re-delivered?

例如,我可以从云函数返回Message 吗? docs 似乎表明这是可能的,如果我没看错的话:

返回 non-null functions.CloudFunction containing non-null functions.pubsub.Message A Cloud Function which you can export.

【问题讨论】:

返回一个成功的承诺 【参考方案1】:

当 PubSub 触发函数(Firebase 或 Cloud Function)时,如果函数正确结束,则消息为确认。但如果函数崩溃或引发异常(总而言之,异常终止),则消息不会确认并立即重新发送

这个重试循环一直执行,直到消息被确认或消息过期(默认和最大 TTL 为 7 天,最小为 10 分钟。您可以在订阅中自定义 messageRetentionDuration)

【讨论】:

真的有效吗?我正在返回被拒绝的承诺,并且没有其他具有相同消息的 firebase 函数调用。是否应该是拒绝或任何其他特殊处理的特定错误? 你能分享你的代码并展示你如何返回你的 noack 错误吗? Schematic code flow: pastebin.com/erme5D6p 所以我返回rejected Promise with Error (name='OtherError', message=`') 嗯。也许我应该重新抛出错误,而不是从 .catch() 返回被拒绝的承诺? 根据这个问题:github.com/firebase/firebase-functions/issues/661,这个回复是错误的,任何执行都会确认消息。请注意,这是firebase-functions。带有 nodejs 客户端库的 Google Cloud Functions 应该以不同的方式工作

以上是关于Firebase:我可以在 Firebase 云功能中“不确认”一条 PubSub 消息吗?的主要内容,如果未能解决你的问题,请参考以下文章

在现有 Firebase 项目目录中初始化 firebase CLI 功能

使用 Firebase 生成归因链接

在哪里可以找到 Firebase 云消息传递的 API KEY?

SwiftUI / Firebase:我可以使用@Published 向 Firebase 数据库发送和接收单个值吗?

我可以在没有实时数据库的情况下访问 Firebase 存储吗

Firebase 最多的项目和应用