使用azure-event-hubs-python从多个分区中获取事件?

时间:2018-04-16 10:20:00

标签: python-2.7 azure amqp azure-eventhub

我按照这里给出的指示https://github.com/Azure/azure-event-hubs-python/tree/master

但我不确定如何使用多个分区。

我尝试过这样的事情

for partition in range(0, 4):
    EventHubClient(ADDRESS).subscribe(MyReceiver(str(partition)), CONSUMER_GROUP, str(partition), OFFSET).run()

但它只为分区0创建接收器并仅侦听它。有没有简单的方法来创建多个接收器来监听不同分区上的事件。

我也尝试过使用

for partition in range(0, 4):
    EventHubClient(ADDRESS).subscribe(MyReceiver(str(partition)), CONSUMER_GROUP, str(partition), OFFSET).run_daemon()

它创建了多个接收器,但我实际上没有得到数据。

1 个答案:

答案 0 :(得分:1)

run方法正在阻塞。事件将传递给MyReceiver的回调。要订阅多个分区,请尝试以下操作

EventHubClient(ADDRESS).subscribe(MyReceiver("0"), CONSUMER_GROUP, "0", OFFSET)
    .subscribe(MyReceiver("1"), CONSUMER_GROUP, "1", OFFSET)
    .subscribe(MyReceiver("2"), CONSUMER_GROUP, "2", OFFSET)
    .subscribe(MyReceiver("3"), CONSUMER_GROUP, "3", OFFSET)
    .run()

方法run_daemon在专用线程上运行客户端,以便应用程序可以调用Receiver.receive方法在需要时获取消息。您可以以相同的方式订阅多个分区。