我创建了一个每日滚动的队列

时间:2016-07-26 11:46:17

标签: chronicle chronicle-queue

我创建了一个每日滚动的队列。第二天,我无法阅读最新的附加信息。我发现在读取上一个周期中的所有消息后,tailer索引不会自动移动到最新周期。顺便说一句,java进程在晚上关闭,并在第二天重新启动。

我使用Chronicle Queue V4.52。

感谢。

2 个答案:

答案 0 :(得分:0)

这应该有效,我们有测试显示从一个周期到下一个周期读取消息。

您是否可以添加一个可以重现此项的测试。您可以使用很多单元测试作为示例。

答案 1 :(得分:0)

现在应该在最新版本

中修复
<dependency>
  <groupId>net.openhft</groupId>
  <artifactId>chronicle-bom</artifactId>
  <version>1.13.15</version>
  <type>pom</type>
 <scope>import</scope>
</dependency>

或者如果您愿意

 <dependency>
       <groupId>net.openhft</groupId>
       <artifactId>chronicle-queue</artifactId>
       <version>4.5.7</version>
 </dependency>

另见测试用例net.openhft.chronicle.queue.impl.single.SingleChronicleQueueTest #testReadingWritingWhenCycleIsSkipped

@Test
public void testReadingWritingWhenCycleIsSkipped() throws Exception {

    final Path dir = Files.createTempDirectory("demo");
    final RollCycles rollCycle = RollCycles.TEST_SECONDLY;

    // write first message
    try (ChronicleQueue queue = ChronicleQueueBuilder
            .single(dir.toString())
            .rollCycle(rollCycle).build()) {
        queue.acquireAppender().writeText("first message");
    }

    Thread.sleep(2100);

    // write second message
    try (ChronicleQueue queue = ChronicleQueueBuilder
            .single(dir.toString())
            .rollCycle(rollCycle).build()) {
        queue.acquireAppender().writeText("second message");
    }

    // read both messages
    try (ChronicleQueue queue = ChronicleQueueBuilder
            .single(dir.toString())
            .rollCycle(rollCycle).build()) {
        ExcerptTailer tailer = queue.createTailer();
        Assert.assertEquals("first message", tailer.readText());
        Assert.assertEquals("second message", tailer.readText());
    }

}