为了账号安全,请及时绑定邮箱和手机立即绑定

获取从 PubSub 事件触发的 Google Cloud Functions 的执行 ID

获取从 PubSub 事件触发的 Google Cloud Functions 的执行 ID

Go
潇潇雨雨 2023-06-19 15:17:36
对于从 HTTP 触发的 Google Cloud Functions,可以通过检查 HTTP 请求 ( "Function-Execution-Id") 的标头来检索执行 ID:package pimport (    "fmt"    "net/http")func F(w http.ResponseWriter, r *http.Request) {    executionID := r.Header.Get("Function-Execution-Id")    fmt.Println(executionID)}但是,对于由 PubSub 事件触发的 GCF,我找不到如何检索此执行 ID:package pimport (    "context")type PubSubMessage struct {    Data []byte `json:"data"`}func F(ctx context.Context, m PubSubMessage) error {    executionID := "" // ???    fmt.Println(executionID)    return nil}我查看了PubSubMessage( https://cloud.google.com/pubsub/docs/reference/rest/v1/PubsubMessage ),但它只包含data一个空attributes地图。我还检查了执行 ID 是否在metadata上下文处理中。但是,根据我的测试和文档 ( https://godoc.org/cloud.google.com/go/functions/metadata#FromContext ),只有EventID,Timestamp和存在。EventTypeResource如何检索由 PubSub 事件触发的 GCF 函数的执行 ID?
查看完整描述

2 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

不,目前无法从 pubsub 触发的事件中获取执行 ID。

正如劳伦所说,您可以从上下文中获取事件 ID,但这与执行 ID 不匹配

此外,pubsub 触发的事件确实有执行 ID。您可以通过使用默认记录器记录事件 ID 来查看这一点。在 stackdriver 中会有一个附加的执行 ID 标签,它不会与事件 ID 匹配。我们观察到事件 ID 是数字,而执行 ID 是字母数字。

此外,如果重试该函数,它将保留相同的事件 ID,但会获得不同的执行 ID。

这是最近的(未记录的)更改,但可以很容易地观察到。


查看完整回答
反对 回复 2023-06-19
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

这似乎不再准确。


Pub/Sub 触发的事件没有执行 ID;相反,它包含EventID在上下文元数据中,这是事件的唯一 ID。


您可以按EventID以下方式访问:


import (

    "context"

    "log"

    "cloud.google.com/go/functions/metadata"

)


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

    ctxMetadata, err := metadata.FromContext(ctx)

    if err != nil {

        log.Fatal(err);

    }

    log.Println("EventID: " + ctxMetadata.EventID)

    return nil

}


查看完整回答
反对 回复 2023-06-19
  • 2 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信