总之,我很感激你的帮助,因为我现在被卡住了!!!
我们有一个新项目,我们将使用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原因,这不是一个选择问题。
答案 0 :(得分:5)
确保在退出ProcessEventsAsync之前调用context.CheckpointAsync。这将存储分区的客户端偏移量,并且分配该分区的下一个处理器实例将从最后存储的偏移量恢复。
请参阅http://msdn.microsoft.com/en-us/library/dn751578.aspx获取文档(但不是很多信息)。
答案 1 :(得分:1)
您应该使用检查点并保存分区的偏移量。 AFAIK无法从eventhub中删除事件。在事件保留日之后,它将自动从eventhub中删除。但我也看到我们将收到已完成保留日的消息。
所以我相信当你达到空间配额时它们会被自动删除,或者它会像预定的任务一样,但不确定。
答案 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