Я создал единую очередь с ежедневной прокаткой

Я создал единую очередь с ежедневной прокаткой. На следующий день я не могу прочитать последнее добавленное сообщение. Я обнаружил, что индекс Tailer не перемещается к последнему циклу автоматически после прочтения всех сообщений в предыдущем цикле. Кстати, процесс Java был остановлен ночью и перезапущен на следующий день.

Я использую Chronicle Queue V4.52.

Благодарю.

2 ответа

Это должно работать, у нас есть тесты, которые показывают, что сообщения читаются из одного цикла в другой.

Можете ли вы включить тест, который воспроизводит это. Существует немало модульных тестов, которые вы можете использовать в качестве примеров.

Теперь это должно быть исправлено в последней версии

<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());
    }

}
Другие вопросы по тегам