Я создал единую очередь с ежедневной прокаткой
Я создал единую очередь с ежедневной прокаткой. На следующий день я не могу прочитать последнее добавленное сообщение. Я обнаружил, что индекс 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());
}
}