Azure EventHub - 如何删除事件?

时间:2014-11-06 13:39:16

标签: c# azure asynchronous azure-eventhub

总之,我很感激你的帮助,因为我现在被卡住了!!!

我们有一个新项目,我们将使用Azure EventHub。我已经创建了演示应用程序,我们可以在事件中心添加事件,也可以使用IEventProcessor(Receiver项目)来消耗它们。问题是每次我执行接收器项目时,我都会看到相同的事件。我们不应该期望这些事件在我们消费后会被删除吗?

Receiver项目中的示例:

foreach (EventData eventData in messages)
{
        string data = Encoding.UTF8.GetString(eventData.GetBytes());

        Console.WriteLine(string.Format("Message received.  Partition: '{0}', Data: '{1}'",
                context.Lease.PartitionId, data));
}

有没有办法在Console.WriteLine之后删除/删除事件,还是会将邮件保留一天?使用队列,您可以发出完成信号,但是由于EventHub没有看到任何命令,我可以使用它来删除/删除它。

任何回复都将不胜感激。我们已被指示使用EventHub但a-b原因,这不是一个选择问题。

5 个答案:

答案 0 :(得分:5)

确保在退出ProcessEventsAsync之前调用context.CheckpointAsync。这将存储分区的客户端偏移量,并且分配该分区的下一个处理器实例将从最后存储的偏移量恢复。

请参阅http://msdn.microsoft.com/en-us/library/dn751578.aspx获取文档(但不是很多信息)。

答案 1 :(得分:1)

您应该使用检查点并保存分区的偏移量。 AFAIK无法从eventhub中删除事件。在事件保留日之后,它将自动从eventhub中删除。但我也看到我们将收到已完成保留日的消息。

https://social.msdn.microsoft.com/Forums/windows/en-US/93b1bf18-2229-4da8-994f-ddc7c675f62f/message-retention-day-not-working?forum=servbus

所以我相信当你达到空间配额时它们会被自动删除,或者它会像预定的任务一样,但不确定。

答案 2 :(得分:1)

Azure Event Hub中的事件在缓冲定义的保留期后将被删除。您可以将保留天数设置为1-7天。无需手动删除它们。

答案 3 :(得分:0)

除了所有其他答案之外,还有一个令人困惑的问题:EventHub可能无法删除超过保留期长达30天的邮件。这取决于放在集线器上的负载。

E.g。保留期限为1天,但如果消息很少,则可以保留更长时间。

幸运的是,他们没有收费。

答案 4 :(得分:-1)

使用事件中心的最佳选择是 EventProcessorHost 框架。 它使您可以检查您已阅读的任何消息。为此,它存储(在blob存储器中)最后一个检查点消息的索引,以便在关闭的情况下恢复处理。

https://blogs.msdn.microsoft.com/servicebus/2015/01/16/event-processor-host-best-practices-part-1/

您可能还需要一个存储模拟器用于开发目的,但如果您有Azure帐户,则可以使用远程blob存储。

https://docs.microsoft.com/en-us/azure/storage/common/storage-use-emulator