即使在 func 成功执行后,pubsub 触发的云功能也不会确认消息

pubsub triggered cloud function not ack the message, even after func executes successfully

我有这个简单的 python 函数,我只是从 pubsub 主题获取输入然后打印它。

import base64,json

def hello_pubsub(event, context):
    """Triggered from a message on a Cloud Pub/Sub topic.
    Args:
         event (dict): Event payload.
         context (google.cloud.functions.Context): Metadata for the event.
    """
    pubsub_message = base64.b64decode(event['data'])
    data           = json.loads(pubsub_message)
    for i in data:
         for k,v in i.items():
              print(k,v)

如果我使用了 pubsub_v1 库,我可以在那里进行以下操作。

subscriber = pubsub_v1.SubscriberClient()

def callback(message):
        message.ack()

subscriber.subscribe(subscription_path, callback=callback)

如何在 pubsub 触发函数中确认消息?

如果函数正常终止且没有错误,该消息应该会自动确认。

根据您的最新消息,我了解了(常见)错误。使用 Pubsub,您有

  • 一个主题,发布者可以在其中发布消息
  • (推送或拉取)订阅。主题中发布的所有消息在每个订阅中都是重复的。消息队列属于每个订阅。

现在,如果您仔细查看有关您主题的订阅,您将至少有 2 个。

  • 您创建的请求订阅。
  • 在主题上部署 Cloud Function 时自动创建的推送订阅。

推送订阅的消息被正确处理和确认。但是,拉式订阅的那些不是,因为 Cloud Function 不使用和确认它们;订阅是独立的。

那么,你的云函数代码是正确的!