我有一个由事件中心触发的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?
答案 0 :(得分:1)
定义EventHub触发器to include Event Metadata。然后在上下文对象上使用receiverRuntimeInfo。
PartitionContext.RuntimeInfo.PartitionId