从指定时间读取 EventHub 数据
Read EventHub data from specified time
我有一个 运行 EvenHub,由 windows 服务监听。一不小心,WindowsService 停止工作了 2 天。如何从 EventHub 停止的地方读取数据?我的 OffSet 设置将如下所示:
processorOptions.InitialOffsetProvider = (partionId) => DateTime.UtcNow;
我尝试再次启动 windows 服务,但它从现在开始。
对此有什么想法吗?
你有没有在 EventProcessor
中调用 await context.CheckpointAsync();
?否则,您将无法轻松做到这一点。通常 EventProcessor
会跟踪已处理的项目。您可以通过在一段时间后或在您的 EventProcessor
.
处理了一些项目后调用 await context.CheckpointAsync();
来做到这一点
使用
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/
我有一个 运行 EvenHub,由 windows 服务监听。一不小心,WindowsService 停止工作了 2 天。如何从 EventHub 停止的地方读取数据?我的 OffSet 设置将如下所示:
processorOptions.InitialOffsetProvider = (partionId) => DateTime.UtcNow;
我尝试再次启动 windows 服务,但它从现在开始。
对此有什么想法吗?
你有没有在 EventProcessor
中调用 await context.CheckpointAsync();
?否则,您将无法轻松做到这一点。通常 EventProcessor
会跟踪已处理的项目。您可以通过在一段时间后或在您的 EventProcessor
.
await context.CheckpointAsync();
来做到这一点
使用
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/