gpt4 book ai didi

java - 读取 Chronicle 队列中写入的最后一个元素

转载 作者:行者123 更新时间:2023-11-29 04:33:55 25 4
gpt4 key购买 nike

我正在使用 SingleChronicleQueue 实现来跟踪我从数据队列(也是 SingleChronicleQueue)中处理的最后一个元素。

为了从崩溃中恢复,我需要读取状态队列中的最后一个元素,它将为我提供最后处理的数据元素的索引。这工作得很好,但我对找到最后一个状态元素的方式不满意。

我现在所做的是使用队列的 firstCycle() 和 lastCycle() 方法。然后我必须回过头来测试这些方法给出的循环范围内是否有任何元素,因为 lastCycle() 方法将返回一个对应于循环文件的数字,该文件可能存在也可能不存在于磁盘上。 (取决于应用程序停机的时间)

一旦找到第一个循环(带有数据),我就会读取所有元素,直到到达结尾。这给了我最后一个状态元素,它处理了最后一个数据索引。

有没有更优雅的方法来获取最后一个状态元素。我试过 ExcerptTailer.toEnd() 但它在(丢失)循环文件的情况下不起作用..

最佳答案

我想出了我遇到的问题,所以我想我会分享它。

为了读取状态队列中的最后一个元素,您可以使用

ExcerptTailer tailer = queue.createTailer(); tailer.direction(TailerDirection.BACKWARD).toEnd();

但是,你要注意不要打电话

queue.acquireAppender().pretouch();

在您这样做之前,因为 pretouch() 方法将创建任何可能需要创建的循环文件。完成后调用

tailer.direction(TailerDirection.BACKWARD).toEnd();

会将您置于无法读取的位置。

注意:只有当 TimeProvider 的设置方式将使编年史队列滚动到新的周期文件时才会发生这种情况。

关于java - 读取 Chronicle 队列中写入的最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42601268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com