首页 > 解决方案 > 在 Chronicle Queue 中跳过文档的最佳方法是什么?

问题描述

从编年史队列中读取文档时,当我对它不感兴趣时​​,跳过当前文档的最佳方法是什么?

即给出以下代码,我应该放什么而不是评论?

try (DocumentContext context = getTailer().readingDocument(false)) {
    if (context.isPresent()) {
        // How do I skip the document here?
    }
}

标签: chronicle-queue

解决方案


好吧,我假设您至少需要放置一些代码来证明您确实对这个特定文档不感兴趣。否则 - 你什么都不放,当文档上下文关闭时 - 文档被跳过。

但是,如果您知道您刚刚阅读了一个文档,该文档告诉您应该跳过下一个文档,并且您觉得很冒险,您可以这样做:

@Test
public void testSkip() {
    final SingleChronicleQueue q = SingleChronicleQueueBuilder.binary("test").build();

    final ExcerptAppender appender = q.acquireAppender();
    appender.writeText("Hello");
    appender.writeText("Cruel");
    appender.writeText("World");

    final ExcerptTailer tailer = q.createTailer().toStart();

    boolean skip = false;
    while (true) {
        if (skip)
            tailer.moveToIndex(tailer.index() + 1);
        final String text = tailer.readText();
        if (text == null)
            break;
        System.err.println(text);
        skip = text.equals("Hello");
    }
}

推荐阅读