Java 编年史队列读取器(摘录)不';t读取消息,即使队列中有大量消息,也返回false

Java 编年史队列读取器(摘录)不';t读取消息,即使队列中有大量消息,也返回false,java,chronicle,chronicle-queue,Java,Chronicle,Chronicle Queue,嗨,我正在使用以下队列版本 chronicle-queue.version : 4.5.15 chronicle-wire.version : 1.7.14 我的编年史阅读器在某个时候卡住了(索引74204158352345),每次调用后readDocument都返回false,但我的编年史阅读器仍在继续将消息写入同一队列。 读卡器代码如下所示: ChronicleQueue queue = ChronicleQueueBuilder.single(chroniclePath).build()

嗨,我正在使用以下队列版本

chronicle-queue.version : 4.5.15
chronicle-wire.version : 1.7.14
我的编年史阅读器在某个时候卡住了(索引74204158352345),每次调用后readDocument都返回false,但我的编年史阅读器仍在继续将消息写入同一队列。 读卡器代码如下所示:

ChronicleQueue queue = ChronicleQueueBuilder.single(chroniclePath).build();
excerptTailer = queue.createTailer();
excerptTailer.readDocument(document);// Marshallable document
我在while循环中调用readDocument。 日志中没有历史记录错误。但我的代码阻止了来自编年史队列的最后一条消息,因为该消息不完整。我只得到了最后一条消息的一些字节,在readDocument返回false之后。但仍有消息不断写入队列

我的作者代码

public void init() {
    queue = ChronicleQueueBuilder.single(chroniclePath).build();
    appender = queue.acquireAppender();
}

public void write(T document) {
    appender.writeDocument(document);
}
public void destroy() {
    if (queue !=null && queue.isClosed()) {
        queue.close();
    }
}
我在本地机器上尝试将队列升级到最新(
4.5.27&1.7.32
)版本,并在同一个生产cq4文件(5GB)上运行读卡器。我再次遇到同样的问题,但控制台上出现错误(在线程转储中也看到了同样的线索)

在新版本中,readDocument方法被挂起。可以挂起递归。
可能是什么问题,请帮助。

您提供的相关修复程序删除了错误stacktrace,但我仍然无法读取相同索引后的cq4文件。再次返回false。
Exception in thread "Chronicle Reader" java.lang.StackOverflowError
    at java.lang.ThreadLocal$ThreadLocalMap.getEntry(ThreadLocal.java:414)
    at java.lang.ThreadLocal$ThreadLocalMap.access$000(ThreadLocal.java:298)
    at java.lang.ThreadLocal.get(ThreadLocal.java:163)
    at java.lang.StringCoding.deref(StringCoding.java:63)
    at java.lang.StringCoding.encode(StringCoding.java:330)
    at java.lang.String.getBytes(String.java:918)
    at java.io.UnixFileSystem.checkAccess(Native Method)
    at java.io.File.canWrite(File.java:796)
    at net.openhft.chronicle.queue.impl.single.SingleChronicleQueueExcerpts$StoreTailer.isReadOnly(SingleChronicleQueueExcerpts.java:798)
    at net.openhft.chronicle.queue.impl.single.SingleChronicleQueueExcerpts$StoreTailer.inACycle(SingleChronicleQueueExcerpts.java:1006)
    at net.openhft.chronicle.queue.impl.single.SingleChronicleQueueExcerpts$StoreTailer.checkMoveToNextCycle(SingleChronicleQueueExcerpts.java:1055)
    at net.openhft.chronicle.queue.impl.single.SingleChronicleQueueExcerpts$StoreTailer.inACycle(SingleChronicleQueueExcerpts.java:1007)
    at net.openhft.chronicle.queue.impl.single.SingleChronicleQueueExcerpts$StoreTailer.checkMoveToNextCycle(SingleChronicleQueueExcerpts.java:1055)
    at net.openhft.chronicle.queue.impl.single.SingleChronicleQueueExcerpts$StoreTailer.inACycle(SingleChronicleQueueExcerpts.java:1007)
    at net.openhft.chronicle.queue.impl.single.SingleChronicleQueueExcerpts$StoreTailer.checkMoveToNextCycle(SingleChronicleQueueExcerpts.java:1055)
    at net.openhft.chronicle.queue.impl.single.SingleChronicleQueueExcerpts$StoreTailer.inACycle(SingleChronicleQueueExcerpts.java:1007)
    at net.openhft.chronicle.queue.impl.single.SingleChronicleQueueExcerpts$StoreTailer.checkMoveToNextCycle(SingleChronicleQueueExcerpts.java:1055)
    at net.openhft.chronicle.queue.impl.single.SingleChronicleQueueExcerpts$StoreTailer.inACycle(SingleChronicleQueueExcerpts.java:1007)
    at net.openhft.chronicle.queue.impl.single.SingleChronicleQueueExcerpts$StoreTailer.checkMoveToNextCycle(SingleChronicleQueueExcerpts.java:1055)
etc...