【Azure 应用服务】Azure Function Python函数中,如何获取Event Hub Trigger的消息Event所属于的PartitionID呢?
问题描述
在通过Azure Function消费Event Hub中的消息时,我们从Function 的 Trigger Details 日志中,可以获得当前Funciton中处理的消息是哪一个分区(PartitionID), 偏移量Offset,序列号SequenceNumber 等信息。
但是在Event的属性中,只发现由PartitionKey存在(该值由消息生产时复制,可以变动,可以为空),根据PartitionKey,无法在应用自己的日志中准确判断分区号(Partition ID).
所以,在Function代码中,应该如何获取到Event的分区号信息呢?
问题解答
在Event的属性中,没有直接获取 PartitionId 的属性,但是有 PartitionContext 属性。这个属性为一个JSON格式对象,它的内容中包含了当前的PartitionID,所以可以通过 event.metadata["PartitionContext"]["PartitionId"] 来完成获取分区号的目标。
实例代码如下:
import logging import azure.functions as func def main(events: func.EventHubEvent): for event in events: logging.info(f' Function triggered to process a message: {event.get_body().decode()}') logging.info(f' EnqueuedTimeUtc = {event.enqueued_time}') logging.info(f' SequenceNumber = {event.sequence_number}') logging.info(f' Offset = {event.offset}') logging.info(f' PartitionId = {event.metadata["PartitionContext"]["PartitionId"]}') #logging.info(f' PartitionId = {event.metadata["PartitionContext"].PartitionId}') # Metadata for key in event.metadata: logging.info(f'Metadata: {key} = {event.metadata[key]}')
执行结果如图:
参考资料
适用于 Azure Functions 的 Azure 事件中心触发器:https://docs.azure.cn/zh-cn/azure-functions/functions-bindings-event-hubs-trigger?tabs=in-process%2Cfunctionsv2%2Cextensionv5&pivots=programming-language-python
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2022-01-05 【Azure API 管理】APIM添加Log-to-eventhub的策略后,一些相关APIM与Event Hub的问题
2021-01-05 【Azure Cloud Services】云服务频繁发生服务器崩溃的排查方案