Python Azure事件中心消费事件属性



我正在努力获得使用python发送到azure事件中心的事件属性。目前我不知道如何使用额外的事件属性,我发送一个事件消息。

这是我发送消息的代码,它工作得很好,但另一方面,我想消费这些属性。

event_data_batch = await producer.create_batch()
i = 0
while i <= 100:
#json_obj = {"TimeStamp": str(datetime.utcnow()),"Name":f"Test{i}", "Metric":"11", "Source": "EventHubMessage"}
json_obj = {"TimeStamp": "timestamp","Name":"Test", "Metric":11, "Source": "EventHubMessage"}
string = json.dumps(json_obj)
Event_data = EventData(body=string)
Event_data.properties = {"Table":"TestTable", "IngestionMappingReference":"TestMapping", "Format":"JSON", "Encoding":"UTF-8"}
event_data_batch.add(Event_data)
i += 1
print(event_data_batch)
return event_data_batch

如你所见,我正在发送额外的event_data属性{"Table":"TestTable", "IngestionMappingReference":"TestMapping", "Format":"JSON", "Encoding":"UTF-8"}和那些我想用另一个python应用程序消费。

你能告诉我怎么做吗?目前,我只能检索消息的主体,但不能检索其属性。

也许你们中有人已经明白了。

谢谢!

最好的,克里斯。

在应用程序的接收端,你可以像这样访问EventData对象的属性:

event.properties

打印:

{b'Table': b'TestTable', b'IngestionMappingReference': b'TestMapping', b'Format': b'JSON', b'Encoding': b'UTF-8'}

如果您遵循MSFT: https://learn.microsoft.com/en-us/azure/event-hubs/event-hubs-python-get-started-send的文档,那么只需在第一个print语句下添加这一行来打印事件属性:

recv.py:

async def on_event(partition_context, event):
# Print the event data.
print("Received the event: "{}" from the partition with ID: "{}"".format(event.body_as_str(encoding='UTF-8'), partition_context.partition_id))
print(event.properties)

另外,如果您希望使用属性dict作为字符串键值对(而不是字节)的字典,您可以使用字典推导式对其进行解码:

{k.decode("utf-8"):v.decode("utf-8") for k,v in event.properties.items()} 

输出:

{'Table': 'TestTable', 'IngestionMappingReference': 'TestMapping', 'Format': 'JSON', 'Encoding': 'UTF-8'}

最新更新