繁体   English   中英

Google Cloud Pub / Sub Python SDK一次检索一条消息

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM