查找触发Cloud Function的Pub/Sub消息的messageID

Svy*_*rny 3 go google-cloud-pubsub google-cloud-functions

我正在尝试访问触发我的 Golang 函数的 Pub/Sub 消息的 messageId。为此,我尝试修改Cloud Functions 文档中的 PubSubMessage 结构:

// PubSubMessage is the payload of a Pub/Sub event.
// See the documentation for more details:
// https://cloud.google.com/pubsub/docs/reference/rest/v1/PubsubMessage
type PubSubMessage struct {
        Data []byte `json:"data"`
        MessageId string `json:"messageId"`
}
Run Code Online (Sandbox Code Playgroud)

该函数编译正常,但 MessageID 值变为空。更改类型没有帮助。我想知道是否有办法从函数内获取触发消息 Id。或者也许根本没有传递给函数?

N.F*_*.F. 5

在您引用的文件中,

事件结构

从 Pub/Sub 主题触发的 Cloud Functions 将发送符合 PubsubMessage 类型的事件,但需要注意的是, publishTime 和 messageId 在 PubsubMessage 中不直接可用。相反,您可以通过事件元数据的事件ID 和时间戳属性访问publishTime 和messageId。此元数据可通过调用函数时传递给函数的上下文对象来访问。

你可以messageId像这样。

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

func YourFunc(ctx context.Context, m PubSubMessage) error {
    metadata, err := metadata.FromContext(ctx)
    if err != nil {
        // Handle Error
    }
    messageId := metadata.EventID

    // Rest of your code below here.
}
Run Code Online (Sandbox Code Playgroud)