我有一个正在运行的EvenHub,它由一个Windows服务监听。无意中,WindowsService停止工作了2天。我如何从EventHub中读取停止的数据?我的OffSet设置如下:
processorOptions.InitialOffsetProvider = (partionId) => DateTime.UtcNow;
我试图再次启动Windows服务,但它从现在开始。
对此有何想法?
答案 0 :(得分:3)
您是否曾在await context.CheckpointAsync();
中致电EventProcessor
?如果不是,你将无法轻易做到这一点。通常,EventProcessor
会跟踪已处理的项目。您可以在一段时间后或await context.CheckpointAsync();
处理完一些项目后致电EventProcessor
来执行此操作。
processorOptions.InitialOffsetProvider = (partionId) => DateTime.UtcNow;
你基本上告诉EventProcessor
忽略之前到过的所有物品。那不是你需要的。如果已在处理代码中调用await context.CheckpointAsync();
,则会删除此调用,将恢复处理尚未处理的项目。如果没有可用的检查点,它将从流的开头开始,具体取决于配置的保留期。然后,您必须手动跳过可能已处理的项目。
一些背景阅读:
understanding check pointing in eventhub
https://blogs.msdn.microsoft.com/servicebus/2015/01/16/event-processor-host-best-practices-part-1/