首页 > 解决方案 > 事件中心中具有不同分区键的事件批次

问题描述

我想使用 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 条消息

标签: pythonazureazure-eventhub

解决方案


我认为这是不可能的,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 async方法来实现这一点。


推荐阅读