问题:我的用例是我希望使用Python Api一次从Google Cloud Pub / Sub接收消息。所有当前示例都提到使用Async / callback选项从Pub / Sub订阅中提取消息。这种方法的问题是我需要保持线程活着。
是否可以只接收1条消息并关闭连接,即是否有一个功能,我可以将参数(如max_messages
)设置为1,这样一旦收到1条消息,线程就会终止?
文档here没有列出Python Synchronous pull的任何内容,它似乎有其他语言(如Java)的num_of_messages
选项。
答案 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。