如何在事件中心触发的Azure函数中获取PartitionId?

时间:2019-04-08 14:44:07

标签: c# azure-functions azure-eventhub

我有一个由事件中心触发的Azure功能。我在host.json中配置了功能应用,MaxBatchSize为32。我的事件中心有6个分区,我不希望事件被处理两次。

因此,我需要分区ID和序列号来唯一标识事件。我想将PartitionID和SequenceNumber作为主键保存在数据库中。我的函数是在EventData数组的输入中触发的。在数组上进行迭代,我可以获得每个消息的SequenceNumber,但是我不知道如何获取每个PartitionID。我试图在输入参数中包括PartitionContext类型的参数,但是它不起作用。

这是我的代码:

[FunctionName("EventHubTriggeredFunction")]
public static void Run([EventHubTrigger("events", Connection = "EventHubConnection")]EventData[] eventHubMessages, TraceWriter log)
{
    foreach (var message in eventHubMessages)
    {
        using (Stream stream = message.GetBodyStream())
        {
            using (StreamReader reader = new StreamReader(stream))
            {
                try
                {
                    //... do something

                    //SequenceNumber: message.SequenceNumber
                    Save(reader.ReadToEnd(), message);

                    //... do something else
                }
            }
        }
 }

如何获取每个已处理消息的PartitionID?

1 个答案:

答案 0 :(得分:1)

定义EventHub触发器to include Event Metadata。然后在上下文对象上使用receiverRuntimeInfo

PartitionContext.RuntimeInfo.PartitionId