【发布时间】:2021-04-24 19:35:14
【问题描述】:
我有一个从发布/订阅消息触发的云功能。此函数从不显式确认源代码中的消息。
如果源代码中从未发生确认,那么该函数何时确认发布/订阅消息?
更新:当函数崩溃时,我知道不应发生消息确认,但该消息的新函数调用永远不会出现在日志中
可重现的示例
-
创建一个名为 test_topic
的发布订阅主题 -
使用触发器 test_topic 创建一个名为 test_function 的云函数。给它所有的默认设置,包括不重试失败。在代码本身中,将语言设置为 python3.7,入口点为 hello_pubsub 和以下代码:
import base64 def hello_pubsub(event, context): pubsub_message = base64.b64decode(event['data']).decode('utf-8') print(pubsub_message) raise RuntimeError('error in function') -
requirements.txt 保持空白
-
进入 test_topic 并以 go 作为文本发布消息。
-
test_function 日志中会出现错误。但是,只有一个函数调用会出现错误,并且即使在几天后仍然会出现这种情况。
【问题讨论】:
-
guillaume 的答案并不完全正确。事件驱动函数的默认行为是在成功/失败的情况下都确认发布/订阅。如果您希望您的云功能在失败时重试,您应该启用“--retry”参数。使用重试的最佳实践可以在这里找到 -> cloud.google.com/functions/docs/bestpractices/…
-
我认为这就是他在编辑中所说的
-
但是“如果函数错误退出,则消息为NACK”语句不是错误的吗?
标签: google-cloud-functions google-cloud-pubsub