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

时间:2018-05-17 15:23:54

标签: python google-cloud-pubsub

问题:我的用例是我希望使用Python Api一次从Google Cloud Pub / Sub接收消息。所有当前示例都提到使用Async / callback选项从Pub / Sub订阅中提取消息。这种方法的问题是我需要保持线程活着。

是否可以只接收1条消息并关闭连接,即是否有一个功能,我可以将参数(如max_messages)设置为1,这样一旦收到1条消息,线程就会终止?

文档here没有列出Python Synchronous pull的任何内容,它似乎有其他语言(如Java)的num_of_messages选项。

2 个答案:

答案 0 :(得分:2)

请参阅以下示例in this link

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

In docs here您有关于代码段中使用的pull方法的更多信息:

  

Pull方法依赖于请求/响应模型:

     

应用程序发送消息请求。服务器回复   零个或多个消息并关闭连接。

答案 1 :(得分:0)

根据官方文档here

  

...您可以完成一次Pub / Sub消息流的处理,   因为PubsubIO基于自定义消息标识符对消息进行重复数据删除   或由Pub / Sub。

指定的标识符

因此,您应该能够使用记录ID(即消息的标识符),以允许跨数据流和其他系统之间的边界进行一次性处理。要使用记录ID,您在构造PubsubIO.Read或PubsubIO.Write转换时调用idLabel,传递您选择的字符串值。在java中,这将是:

public PubsubIO.Read.Bound<T> idLabel(String idLabel)

这将返回一个类似于此的转换,但它从给定的消息属性中读取唯一的消息ID。