如何在事件中心触发Azure功能中获取PartitionId?

问题描述 投票:0回答:1

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

因此,我需要分区ID和序列号来唯一地标识事件。我想将PartitionID和SequenceNumber保存在我的数据库中作为主键。使用Array of 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?

c# azure-functions azure-eventhub
1个回答
1
投票

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

PartitionContext.RuntimeInfo.PartitionId
© www.soinside.com 2019 - 2024. All rights reserved.