我使用SingleChronicleQueue實現來跟蹤從數據隊列(也是SingleChronicleQueue)處理的最後一個元素。讀取編寫在Chronicle隊列中的最後一個元素
爲了從崩潰中恢復,我需要讀取狀態隊列中的最後一個元素,它會給我上一次處理的數據元素的索引。這工作得很好,但我不滿意我找到最後一個狀態元素的方式。
我現在所做的是使用隊列的firstCycle()和lastCycle()方法。然後我必須回頭測試這些方法給出的循環範圍內是否有元素,因爲lastCycle()方法將返回與循環文件相對應的數字,該循環文件可能存在或不存在於磁盤上。 (取決於應用程序停機的時間長短)
一旦找到第一個週期(包含數據),我將讀取所有元素,直到達到最後。這給了我最後一個處理最後一個數據索引的狀態元素。
有沒有更優雅的方式來獲取最後的狀態元素。我試過了ExcerptTailer.toEnd(),但它在(缺少)循環文件的情況下不起作用。