【问题标题】:Google Cloud Pub/Sub Python SDK retrieve single message at a timeGoogle Cloud Pub/Sub Python SDK 一次检索单个消息
【发布时间】:2018-10-27 22:32:51
【问题描述】:

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

是否可以只接收 1 条消息并关闭连接,即是否有一项功能可以让我将参数(类似于 max_messages)设置为 1,以便在收到 1 条消息后线程终止?

文档here 没有列出任何关于 Python 同步拉取的内容,它似乎对 Java 等其他语言有 num_of_messages 选项。

【问题讨论】:

    标签: python google-cloud-pubsub


    【解决方案1】:

    根据官方文档here

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

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

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

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

    【讨论】:

    • 我没有在 Dataflow 中使用它,也没有使用 Java
    【解决方案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你有更多关于代码sn-p中使用的拉取方法的信息:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-30
      • 2022-01-13
      • 1970-01-01
      • 2022-01-01
      • 2021-10-08
      • 2021-12-12
      • 1970-01-01
      • 2018-06-22
      相关资源
      最近更新 更多