一个应用程序中有多个发布/订阅订阅服务器

2024-06-25 05:27:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为不同的订阅设置两个不同的google pub/sub订阅服务器,但使用相同的代码。为了画出更好的画面,我有主题1和主题2。然后我有订阅topic1的订阅1和订阅topic2的订阅2。然后是subscriber1,它链接到subscription1,subscriber2,它链接到subscription2。我的问题是如何在同一个应用程序中使用subscriber1和subscriber2。仅1个订户的示例如下(来自文档):

project_id = "my-project-id"
subscription_id = "subscription1"

subscriber = pubsub_v1.SubscriberClient()
subscription_path = subscriber.subscription_path(project_id, subscription_id)
streaming_pull_future = subscriber.subscribe(subscription_path, callback=callback)
logging.info("Listening for messages on {}..\n".format(subscription_path))

# Wrap subscriber in a 'with' block to automatically call close() when done.
with subscriber:
    try:
        # When `timeout` is not set, result() will block indefinitely,
        # unless an exception is encountered first.
        streaming_pull_future.result()
    except TimeoutError:
        streaming_pull_future.cancel()

如何将subscription2添加到其中,以便我的python应用程序可以从topic1和topic2获取消息?我在文档中找不到它,但是如果我只是因为某种原因丢失了它,请告诉我


Tags: pathprojectid主题链接futurepullsubscription
1条回答
网友
1楼 · 发布于 2024-06-25 05:27:20

如果要同时从两个订阅接收消息,请创建两个SubscriberClient实例,每个订阅一个。要组合未来,您可以使用一个事件:

project_id = "my-project-id"
subscription_id1 = "subscription1"
subscription_id2 = "subscription2"

subscriber1 = pubsub_v1.SubscriberClient()
subscriber2 = pubsub_v1.SubscriberClient()
subscription_path1 = subscriber.subscription_path(project_id, subscription_id1)
subscription_path2 = subscriber.subscription_path(project_id, subscription_id2)
streaming_pull_future1 = subscriber1.subscribe(subscription_path1, callback=callback)
logging.info("Listening for messages on {}.".format(subscription_path1))
streaming_pull_future2 = subscriber2.subscribe(subscription_path2, callback=callback)
logging.info("Listening for messages on {}.".format(subscription_path2))

subscriber_shutdown = threading.Event()
streaming_pull_future1.add_done_callback(lambda result: subscriber_shutdown.set())
streaming_pull_future2.add_done_callback(lambda result: subscriber_shutdown.set())

# Wrap subscriber in a 'with' block to automatically call close() when done.
with subscriber1, subscriber2:
  subscriber_shutdown.wait()
  streaming_pull_future1.cancel()
  streaming_pull_future2.cancel()

相关问题 更多 >