对于事件中心,如果我们遇到故障并且使用者崩溃,那么下次出现时如何查询它从存储中获取的分区所在的检查点,以便可以比较引用该消息和传入消息的序列ID,并仅处理该序列ID之后的消息?
要保存检查点,有一个API,但是如何检索呢?
答案 0 :(得分:0)
您知道事件中心检查指向完全是客户端,即,您可以使用方法将当前偏移量存储在与事件中心链接的存储帐户中
await context.CheckpointAsync();
在您的客户代码中。这将转换为存储帐户调用。这与任何EventHub服务调用都不相关。
每当事件中心发生故障时,您都可以从存储帐户中读取最新的(更新的)偏移量,以避免重复事件。这必须由您在客户端代码上进行处理,而不会由事件中心本身。
如果读取器与分区断开连接,则在重新连接时,它将在该使用者组中该分区的最后一个读取器先前提交的检查点处开始读取。当阅读器连接时,它将偏移量传递到事件中心,以指定开始阅读的位置。这样,您可以使用检查点来将事件标记为下游应用程序“完成”,并在运行于不同计算机上的读取器之间发生故障转移时提供弹性。通过指定此检查点过程的较低偏移量,可以返回到较旧的数据。通过这种机制,检查点既可以启用故障转移弹性,又可以启用事件流重播。
此外,事件中心发生故障的情况很少,重复事件的发生频率也较低。有关构建没有重复事件的工作流程的更多详细信息,请参见此堆栈溢出answer
检查点的详细信息将以下面给出的格式保存在链接到事件中心的存储帐户中。可以使用WindowsAzure.Storage客户端进行读取,以对收到的最后一个事件的序列号进行自定义验证。