【Azure 应用服务】Azure Function Python函数中,如何获取Event Hub Trigger的消息Event所属于的PartitionID呢?

PartitionID,Event ,Trigger,Python · 浏览次数 : 36

小编点评

## 代码示例: ```python import logging import azure.functions as funcdef def main(events: func.EventHubEvent): for event in events: logging.info(f' Function triggered to process a message: {event.get_body().decode()}') # 获取分区号信息 partition_id = event.metadata["PartitionContext"]["PartitionId"] logging.info(f' PartitionId = {partition_id}') # 其他日志信息 logging.info(f' EnqueuedTimeUtc = {event.enqueued_time}') logging.info(f' SequenceNumber = {event.sequence_number}') logging.info(f' Offset = {event.offset}') ``` **解释:** 1. 使用 `event.metadata` 获取事件属性,其中包含 `PartitionContext` 字段。 2. `PartitionContext` 字段是一个 JSON 格式对象,包含当前分区的 ID。 3. 使用 `event.metadata[\"PartitionContext\"][\"PartitionId\"]` 获取分区号信息。 4. 可以根据 `partition_id` 在日志中进行区分。

正文

问题描述

在通过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

 

与【Azure 应用服务】Azure Function Python函数中,如何获取Event Hub Trigger的消息Event所属于的PartitionID呢?相似的内容:

【Azure 应用服务】Azure Function Python函数中,如何获取Event Hub Trigger的消息Event所属于的PartitionID呢?

问题描述 在通过Azure Function消费Event Hub中的消息时,我们从Function 的 Trigger Details 日志中,可以获得当前Funciton中处理的消息是哪一个分区(PartitionID), 偏移量Offset,序列号SequenceNumber 等信息。 但是在

【Azure 应用服务】Azure Function Python函数部署到Azure后遇见 Value cannot be null. (Parameter 'receiverConnectionString') 错误

问题描述 使用VS Code创建Python Function,处理Event Hub中的数据。当部署到Azure Function App后,函数无法执行,查看 Function 日志出现 Value cannot be null. (Parameter 'receiverConnectionSt

【Azure 应用服务】Python fastapi Function在Azure中遇见AttributeError异常(AttributeError: 'AsgiMiddleware' object has no attribute 'handle_async')

问题描述 参考文档“Using FastAPI Framework with Azure Functions”, 使用FastAPI 模块在Function中实现API请求。通过VS Code本地运行成功。 但是部署到Azure Function App后,遇见了如下错误: [2023-01-30T

【Azure 应用服务】Azure Function Timer触发函数加上Singleton后的问题

问题描述 在Azure Function Timer Trigger的函数中,添加了Singleton属性,当Function的实例变为3个后,发现Timer函数并没有在三个实例上同时运行,每次触发时,都只有在一个实例上运行。这时因为Singleton属性的原因吗? 问题解答 在调查Singleto

【Azure 应用服务】Azure Function 部署槽交换时,一不小心把预生产槽上的配置参数交换到生产槽上,引发生产错误

问题描述 部署Function代码先到预生产槽中,进行测试后通过交换方式,把预生产槽中的代码交换到生产槽上,因为在预生产槽中的设置参数值与生产槽有不同,但是在交换的时候,没有仔细检查。导致在交换的时候,把预生产的一些设置值交换到生产中,引起生产错误。 那么是否只进行代码交换而不进行设置值的交换呢?

【Azure 应用服务】Azure Data Factory中调用Function App遇见403 - Forbidden

问题描述 在Azure Data Factory (数据工厂)中,调用同在Azure中的Function App函数,却出现403 - Forbidden错误。 截图如下: 问题解答 访问Azure Function App遇见403 - Forbidden错误,这是因为Function App启用

【Azure 应用服务】Azure Function App在部署时候遇见 503 ServiceUnavailable

问题描述 在VS Code中编写好 Azure Function App代码后,通过 func azure functionapp publish 部署失败,抛出 503 Service Unavailable 错误。 Getting site publishing info... Creating

【Azure 应用服务】Azure Powershell Function 出错 The term 'Connect-AzAccount' is not recognized

问题描述 在Azure Function中,执行Powershell的Function脚本时,先后出现 1:[Error] ERROR: The term 'Connect-AzAccount' is not recognized as a name of a cmdlet, function, s

【Azure 应用服务】Azure JS Function 异步方法中执行SQL查询后,Callback函数中日志无法输出问题

Warning: Unexpected call to 'log' on the context object after function execution has completed. Please check for asynchronous calls that are not awaited or calls to 'done' made before function executi

【Azure 应用服务】Function App / App Service 连接 Blob 报错

问题描述 因 Blob 启用了防火墙功能,但是当把App Service 或 Function App的出站IP地址都加入到Blob的白名单中,为什么访问还是403错误呢? 问题解答 Azure Storage的IP网络规则不适用于同一数据中心的客户端。 存储帐户部署在同一区域中的服务使用专用的 A