我正在使用 SingleChronicleQueue 实现来跟踪我从数据队列(也是 SingleChronicleQueue)中处理的最后一个元素。
为了从崩溃中恢复,我需要读取状态队列中的最后一个元素,这将为我提供最后处理的数据元素的索引。这很好用,但我对找到最后一个状态元素的方式不满意。
我现在做的是使用队列的 firstCycle() 和 lastCycle() 方法。然后我必须回去测试这些方法给出的循环范围内是否有任何元素,因为 lastCycle() 方法将返回一个与磁盘上可能存在或不存在的循环文件相对应的数字。(取决于应用程序关闭了多长时间)
一旦找到第一个周期(带有数据),我就会读取所有元素,直到我到达终点。这给了我处理最后一个数据索引的最后一个状态元素。
有没有更优雅的方式来获取最后一个状态元素。我已经尝试过 ExcerptTailer.toEnd() 但它在(丢失)循环文件的情况下不起作用..