即使在 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 不使用和确认它们;订阅是独立的。
那么,你的云函数代码是正确的!
我有这个简单的 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 不使用和确认它们;订阅是独立的。
那么,你的云函数代码是正确的!