【发布时间】:2019-04-08 14:44:06
【问题描述】:
我有一个由事件中心触发的 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?
【问题讨论】:
-
是什么让您认为您的消息被处理了两次?正常行为是消息被处理一次。
-
@PeterBons 知道了。我认为可以多次处理一条消息,直到他到期(在我的情况下为 1 天)。我是事件中心的初学者。谢谢你的澄清。
-
那一天(我们正在谈论保留,是吗?)是保留消息的最短天数。在现实世界中,我看到他们在那里坐了几个星期,甚至几个月
-
您可以处理较旧的消息,但需要一些(手动)步骤,但这不是默认行为。
标签: c# azure-functions azure-eventhub