事件中心检查点在服务器重启之前不获取事件

Event Hub Checkpoint Not Fetching Events Until Server Restart

我的异步使用者正在从事件中心获取数据。我在每次事件处理后更新检查点。如果在处理事件时引发任何 error/exception,则不会更新检查点。这样我们以后就可以得到相同的事件,我们不会跳过这些事件。但是,在我们重新启动服务器之前,我们不会收到这些处理失败的事件。

一旦服务器重新启动,我们将获得新事件以及未设置检查点的事件。

有什么方法可以在不重启的情况下获取它们(没有检查点的事件)?

而且我对检查点行为也有点困惑。对于假设

Event 1 is processed. Checkpoint.
Event 2 throws an exception.
Event 3 throws an exception.
Event 4 is processed. Checkpoint.

现在每当服务器重新启动时,检查点都在事件 2 和 3 之后,因此它们永远不会被重新处理。但是,当检查点在事件 4 更新时服务器重新启动时,他们怎么又回来了,它应该从事件 4 中获取对吗?

简短的回答是“不是来自同一个消费者。”

Event Hubs是一个事件流,可以以只进方式读取;您无法倒回流并就地重新读取事件。要倒带,您必须创建一个新的 link 并在流中指定一个较早的起始位置。

来自事件中心 SDK 的消费者客户端读取事件并将它们发送到您的代码进行处理。每个读取的事件都会发出一次——处理代码有责任判断如何发出。如果您的处理以您认为是暂时的方式失败,则应确保对该事件的重试作为处理逻辑的一部分,就像对您希望稍后重新访问的事件的任何形式的死信一样。