You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Cloud Workflows中解码Firestore事件的Protobuf负载

解码Google Cloud Workflow中Firestore事件的Protobuf消息

问题背景

我使用YAML定义Google Cloud Workflow,通过EventArc监听Firestore文档保存事件,触发器运行正常,但无法解码收到的Protobuf消息,也找不到相关文档。以下是收到的示例消息和当前Workflow YAML代码,请求指导如何解码给定消息中的Protobuf。

示例消息

{
  "data": "CrUECpYECjoKFhIUZX5maXJlY21zLWRlbW8tMjcxNTASIAoIcHJvZHVjdHMaFDByTzUzNnFxR3dzRzdVSEtTUnNjGgwKBmltYWdlcxICSgAaEwoKanNvbl9maWVsZBIFMgCYAQEaRgoKbWFpbl9pbWFnZRI4igEyaW1hZ2VzL3A3c3RwX3Bob3RvLTE1MzE3NDYwMjA3OTgtZTY5NTNjNmU4ZTA0LmF2aWaYAQEaEgoJYXZhaWxhYmxlEgUIAJgBARoUCgtkZXNjcmlwdGlvbhIFWACYAQEaGwoOdXBwZXJjYXNlX25hbWUSCYoBA0NDQ5gBARohChFhdmFpbGFibGVfbG9jYWxlcxIMSgoKCIoBAmVzmAEBGhYKEHJlbGF0ZWRfcHJvZHVjdHMSAkoAGgoKBHRhZ3MSAkoAGg8KBnB1YmxpYxIFCACYAQEaFAoLYW1hem9uX2xpbmsSBVgAmAEBGg4KBXByaWNlEgVYAJgBARoRCgRuYW1lEgmKAQNjY2OYAQEaNwoJcHVibGlzaGVyEioyJRoNCgRuYW1lEgVYAJgBARoUCgtleHRlcm5hbF9pZBIFWACYAQGYAQEaFQoIY3VycmVuY3kSCYoBA0RPTJgBARoRCghjYXRlZ29yeRIFWACYAQEaEwoFYnJhbmQSCooBBHZydnKYAQEaHQoIYWRkZWRfb24SEVIMCOufsrAGEIDqgIcDmAEBKgwI65+ysAYQmNqamwMyDAjrn7KwBhCY2pqbAw==",
  "database": "(default)",
  "datacontenttype": "application/protobuf",
  "dataschema": "https://github.com/googleapis/google-cloudevents/blob/main/proto/google/events/cloud/datastore/v1/data.proto",
  "entity": "products/0rO536qqGwsG7UHKSRsc",
  "id": "8da5a03c-3779-4d46-be20-546841cbaa8c",
  "location": "europe-west1",
  "namespace": "(default)",
  "project": "firecms-demo-27150",
  "source": "//firestore.googleapis.com/projects/firecms-demo-27150/databases/(default)",
  "specversion": "1.0",
  "subject": "documents/products/0rO536qqGwsG7UHKSRsc",
  "time": "2024-04-02T23:08:27.862367Z",
  "type": "google.cloud.datastore.entity.v1.created"
}

当前Workflow YAML代码

main:
  params: [event]
  steps:
      - extract_data:
          assign:
            - data: # How do I decode a protobuf from the given message??
          
      - create_document:
            call: googleapis.firestore.v1.projects.databases.documents.patch
            args:
                name: ${name}
                body:
                    fields:
                        test_new_field:
                            stringValue: abc

解决方案

Google Cloud Workflow内置了googleapis.events.decode函数,专门用于解码Google Cloud Events的Protobuf数据。你只需要在步骤中调用该函数,传入base64编码的event.data和对应的Protobuf消息类型即可。

修改后的完整YAML代码

main:
  params: [event]
  steps:
    - extract_data:
        assign:
          # 解码Protobuf数据,指定对应的消息类型
          - decoded_data: ${googleapis.events.decode(event.data, "google.events.cloud.datastore.v1.EntityEventData")}
          # 提取Firestore实体的字段内容
          - entity_fields: ${decoded_data.value.fields}
          # 从event的subject字段获取文档的完整路径
          - document_name: ${event.subject}
    - create_document:
        call: googleapis.firestore.v1.projects.databases.documents.patch
        args:
          name: ${document_name}
          body:
            fields:
              test_new_field:
                stringValue: abc

关键说明

  • googleapis.events.decode函数接收两个参数:
    1. 第一个参数是事件中的data字段(base64编码的Protobuf内容)
    2. 第二个参数是Protobuf消息类型的全称,这里对应Firestore实体事件的类型是google.events.cloud.datastore.v1.EntityEventData
  • 解码后,decoded_data.value就是触发事件的Firestore实体对象,其fields属性包含了该文档的所有字段数据
  • 文档的完整路径可以直接从事件的subject字段获取,无需额外拼接

内容的提问来源于stack exchange,提问作者gatti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 20:35:38