事件中心中具有不同分区键的事件的批处理

问题描述 投票:0回答:1

我想使用python客户端在事件中心发送一批具有不同分区键的事件。我可以发送带有分区键集的单个消息,但是如果我需要向事件中心发送一批包含不同分区键的事件该怎么办

这里是1个事件的代码

message = [{'id': 1, 'msg': 'this is test msg 1'}, 
           {'id': 2, 'msg': 'this is test msg 2'},
           {'id': 3, 'msg': 'this is test msg 3'}]
for msg in message:
 client.run()

 event_data = EventData(msg['msg'])
 event_data.partition_key = str(msg['id'])
 sender.send(event_data)

我想同时批量发送所有3条消息的方法相同

python azure-eventhub
1个回答
1
投票

我认为这是不可能的,send batch method会将所有事件批量发送到同一分区。

这里是测试代码,我可以为事件数据指定不同的分区键,然后批量发送(您可以根据需要对其进行修改):

from azure.eventhub import EventHubClient, Sender, EventData

# use this method to generate event data, and set partition key.
def data_generator():
    for i in range(15):
        data = EventData("hi, hello world!")    
        if i % 2 ==0:    
            data.partition_key=b'0'
        else:
            data.partition_key=b'1'
        temp = data.body_as_str()
        yield temp

ADDRESS = "xxxx"

# SAS policy and key are not required if they are encoded in the URL
USER = "RootManageSharedAccessKey"
KEY = "xxx"

client = EventHubClient(address=ADDRESS,username=USER,password=KEY)
sender = client.add_sender()
client.run()

data = EventData(batch=data_generator())
sender.send(data)
print("*completed*")

它发送成功,但是当我读取偶数数据时,我可以看到所有数据实际上都已发送到一个相同的分区。

如果您使用batch send method来提高性能的原因,并且必须使用不同的分区键,则可以考虑使用send asyn c方法来实现。

热门问题
推荐问题
最新问题