![](/img/trans.png)
[英]Run synchronous pull in Google Cloud Pub/Sub with the Python client API
[英]Google Cloud Pub/Sub Python SDK retrieve single message at a time
问题 :我的用例是我想从Google Cloud Pub / Sub接收消息-使用Python Api一次接收一条消息。 当前所有示例都提到了使用Async / callback选项从发布/订阅订阅中提取消息。 这种方法的问题是我需要保持线程处于活动状态。
是否可以仅接收1条消息并关闭连接,即是否有一个功能,我可以将一个参数(类似max_messages
)设置为1,以便一旦收到1条消息,该线程就会终止?
此处的文档未列出任何有关Python Synchronous pull的内容,这些num_of_messages
对于其他语言(如Java)似乎具有num_of_messages
选项。
请参阅此链接中的以下示例:
from google.cloud import pubsub_v1
client = pubsub_v1.SubscriberClient()
subscription = client.subscription_path('[PROJECT]', '[SUBSCRIPTION]')
max_messages = 1
response = client.pull(subscription, max_messages)
print(response)
我已经尝试过自己,并使用它一次可以收到一条消息。
如果遇到错误,请尝试将pubsub库更新到最新版本:
pip install --upgrade google-cloud-pubsub
在这里的docs中,您可以获得有关代码段中使用的pull方法的更多信息:
Pull方法依赖于请求/响应模型:
该应用程序发送消息请求。 服务器以零个或多个消息答复并关闭连接。
根据官方文档在这里 :
...您可以只对Pub / Sub消息流进行一次处理,因为PubsubIO根据自定义消息标识符或Pub / Sub分配的标识符对消息进行重复数据删除。
因此,您应该能够使用记录ID,即消息的标识符,以便在Dataflow与其他系统之间的边界上进行一次精确的处理。 若要使用记录ID,请在构造PubsubIO.Read或PubsubIO.Write转换时调用idLabel,并传递您选择的字符串值。 在Java中,这将是:
public PubsubIO.Read.Bound<T> idLabel(String idLabel)
这将返回一个类似于此的转换,但将从给定的message属性读取唯一的消息ID。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.