如何从事件触发的云功能中检索 delivery_attempt?

Posted

技术标签:

【中文标题】如何从事件触发的云功能中检索 delivery_attempt?【英文标题】:How to retrieve delivery_attempt from event triggered cloud function? 【发布时间】:2021-11-27 15:53:01 【问题描述】:

我正在编写一个 Python 云函数,我想检索“delivery_attempt”属性。

根据文档,Cloud Function 仅获取 2 个参数:事件(PubsubMessage 类型)和上下文。

def hello_pubsub(event, context):
    """Background Cloud Function to be triggered by Pub/Sub.
    Args:
         event (dict):  The dictionary with data specific to this type of
                        event. The `@type` field maps to
                         `type.googleapis.com/google.pubsub.v1.PubsubMessage`.
                        The `data` field maps to the PubsubMessage data
                        in a base64-encoded string. The `attributes` field maps
                        to the PubsubMessage attributes if any is present.
         context (google.cloud.functions.Context): Metadata of triggering event
                        including `event_id` which maps to the PubsubMessage
                        messageId, `timestamp` which maps to the PubsubMessage
                        publishTime, `event_type` which maps to
                        `google.pubsub.topic.publish`, and `resource` which is
                        a dictionary that describes the service API endpoint
                        pubsub.googleapis.com, the triggering topic's name, and
                        the triggering event type
                        `type.googleapis.com/google.pubsub.v1.PubsubMessage`.
    Returns:
        None. The output is written to Cloud Logging.
    """

如何检索邮件的delivery_attempt?

【问题讨论】:

【参考方案1】:

通过 Pub/Sub 触发云函数时,无法访问传递尝试字段。相反,获取访问权限的方法是设置一个基于 HTTP 的云函数,并在您单独创建的订阅中使用触发 URL 作为推送端点。

然后,您可以按如下方式访问传递尝试:

def hello_world(request):
    """Responds to any HTTP request.
    Args:
        request (flask.Request): HTTP request object.
    Returns:
        The response text or any set of values that can be turned into a
        Response object using
        `make_response <http://flask.pocoo.org/docs/1.0/api/#flask.Flask.make_response>`.
    """
    request_json = request.get_json()
    print(request_json["deliveryAttempt"])

【讨论】:

有没有打算将此功能添加到 PubSub 触发的函数中?将函数转换为http触发后能够检索到该字段并不是很方便。

以上是关于如何从事件触发的云功能中检索 delivery_attempt?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用消息排序部署 pubsub 触发的云功能?

如何从 JavaScript 手动触发元素的 hx-get 事件

云功能有时会在触发另一个云功能后写入 FireStore

云功能中的云消息传递:admin.messaging(...)。send不是一个功能

如何将用户输入参数传递给我的云函数?

GCP Pub/Sub - 如何从 BQ 计划查询中检索状态