如何从 Google Pub/Sub 获取 objectId、bucketId 等

Posted

技术标签:

【中文标题】如何从 Google Pub/Sub 获取 objectId、bucketId 等【英文标题】:How to get objectId, bucketId, etc from Google Pub/Sub 【发布时间】:2021-07-14 00:45:18 【问题描述】:

我正在使用在 GCS 存储桶中创建对象时触发的 Pub/Sub 主题。这是我目前得到的代码:

@app.route('/', methods=["POST"])
def index():

    envelope = request.get_json()
    myfunc(envelope)

    return "", 204


def myfunc(envelope):
    event_type = envelope.get("eventType")
    bucket_id = envelope.get("bucketId")
    object_id = envelope.get("objectId")
    
    print(event_type)
    print(bucket_id)
    print(object_id)

目前这只是为每次打印打印出'None'。我希望它打印与objectIdbucketIdetc keys 关联的值,以便能够获取出现在 GCS 存储桶中的文件的文件名。

感谢您的帮助!

【问题讨论】:

envelope 应该是消息吗?如果是这样,这个 github 示例应该可以帮助您正确解析消息。 github.com/GoogleCloudPlatform/python-docs-samples/blob/master/… 上面的例子显示了每当在连接到发布/订阅主题的存储桶上创建对象时的事件类型、存储桶 ID、对象 ID 和生成。 【参考方案1】:

我不确定....但我猜您的函数签名不正确...

Google Cloud Storage Triggers - object finalize example

【讨论】:

是的,在某些方面肯定是错误的。但是该链接用于对象完成时的触发器,而不是 pubsub 触发器。我需要后者,因为我需要能够 nack/ack 消息。 如果您有“推送”pubsub 订阅(云功能由消息触发),据我所知,您将无法从代码内部确认消息。 ..【参考方案2】:

当您使用推送订阅时,您会收到 JSON 格式的 POST 正文中的 PubSub 消息。消息的架构符合API spec documentation

【讨论】:

以上是关于如何从 Google Pub/Sub 获取 objectId、bucketId 等的主要内容,如果未能解决你的问题,请参考以下文章

Google Cloud 上使用 Pub/Sub 的主/从模式

无法按日期从 Google Cloud Pub/Sub 功能中的 Firebase 获取文档

从 Google Cloud Pub/Sub 而不是 base64 获取未编码的数据

如何在 Google Pub/Sub 中验证外部发布者?

如何在 Google Cloud Function 上的 Spring Cloud 函数中获取 Pub/Sub 事件的元数据

如何从前端移动客户端发布到 Google Pub/Sub?