gpt4 book ai didi

google-cloud-functions - GCP 云功能何时确认发布/订阅消息?

转载 作者:行者123 更新时间:2023-12-02 18:59:14 27 4
gpt4 key购买 nike

我有一个从发布/订阅消息触发的云功能。此函数从不明确确认源代码中的消息。

如果源代码中从未发生过确认,​​那么该函数何时确认发布/订阅消息?

更新:当一个函数崩溃时,我知道不应该发生消息确认,但是该消息的新函数调用永远不会出现在日志中

可重现的例子

  • 创建一个名为 test_topic 的 pubsub 主题

  • 使用触发器 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 日志中将出现错误。但是,只有一个函数调用会出现错误,即使在几天左右之后,这种情况仍将存在。

最佳答案

如果函数正常完成,则消息被确认。如果函数错误退出,则消息为 NACK。


编辑 1

我已经使用 Go 后台函数进行了测试。您需要使用参数 --retry 部署您的云函数,以允许重试错误消息。否则,不会重试消息。

在 Go 中,这里执行重试的情况:

  • 返回错误(相当于 Java 或 Python 中的异常),日志中的状态为“错误”
  • 在日志中执行 log.Fatal()(退出函数(函数崩溃))状态“连接错误”
  • 执行显式退出,在日志中显示状态“连接错误”

这里是代码(如果感兴趣的话)

type PubSubMessage struct {
Data []byte `json:"data"`

}

func PubsubError(ctx context.Context, m PubSubMessage) error {

switch string(m.Data) {
case "ok":
return nil
case "error":
return errors.New("it's an error")
case "fatal":
log.Fatal("crash")
case "exit":
os.Exit(1)
}
return nil
}

以及我如何部署我的 Cloud Functions

gcloud beta functions deploy --runtime=go113 --trigger-topic=test-topic \
--source=function --entry-point=PubsubError --region=us-central1 \
--retry pubsuberror

关于google-cloud-functions - GCP 云功能何时确认发布/订阅消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65809511/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com