如何获取触发Golang Cloud Function的Pub/Sub消息的messageID
你遇到的MessageId为空是因为结构体定义和Cloud Function实际接收的Pub/Sub事件负载结构不匹配导致的,该字段一定会传递到Cloud Function中,不需要额外配置,调整结构体即可正常读取。
错误原因
你之前的结构体直接将Data、MessageId定义在最外层,但实际Pub/Sub触发的事件会在外层多包裹一层结构,包含消息本体和触发订阅的名称,直接在最外层定义对应字段自然无法匹配到值。
正确代码示例
// PubSubMessage 对应Pub/Sub的消息本体结构 type PubSubMessage struct { Data []byte `json:"data"` MessageId string `json:"messageId"` Attributes map[string]string `json:"attributes,omitempty"` } // PubSubEvent 是Cloud Function实际接收到的外层事件结构 type PubSubEvent struct { Message PubSubMessage `json:"message"` Subscription string `json:"subscription"` } // 函数入口 func HandlePubSubEvent(ctx context.Context, e PubSubEvent) error { // 直接读取即可拿到非空的MessageId msgId := e.Message.MessageId // 后续业务逻辑 return nil }
修改后重新部署函数即可正常读取到消息的MessageId值。
内容的提问来源于stack exchange,提问作者Svyatoslav Pidgorny
相关产品推荐
相关产品推荐

