2016-07-26 5 views
1

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

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

Спасибо.

ответ

0

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

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

+0

Спасибо! У меня есть 2 файла cq4, которые невозможно прочитать. Вы можете скачать файлы с http://www.mf999.com/download/test.zip. Код выглядит так: SingleChronicleQueue queue = ChronicleQueueBuilder.single ("e:/test"). Build(); ExcerptTailer tailer = queue.createTailer(); System.out.println (queue.lastCycle()); while (tailer.readBytes (b -> {System.out.println (b.readUtf8());})) { System.out.println (queue.rollCycle(). ToCycle (tailer.index()) + "#" + queue.rollCycle(). toSequenceNumber (tailer.index())); } –

+0

Спасибо. Chroncile Queue - отличная вещь. –

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

} 
+1

Большое спасибо! После того, как я перейду к последней версии, результат будет правильным. –