阅读后未删除Java编年史消息

我正在尝试使用Java Chronicle 1.9.2编写/读取消息.我知道可以使用更新的版本,但是在我花更多时间之前,几乎没有疑问.

阅读纪事摘录后,我需要删除邮件.
因此,如果我的读者重新开始,它就不会回到开始.
同样的消息对我来说一经阅读就没有用了,所以想删除它.

有选择的办法吗?我正在尝试遵循代码,并且每次启动阅读器时,我都会再次收到所有消息.
此外,还有一个选项可以设置“生存时间”消息,以便在一定时间后自动将其删除.

作家-

        String tempPath = System.getProperty("java.io.tmpdir");
        String basePrefix = tempPath  + "chronicle";
        System.out.println("base prefix: " + basePrefix);
        Chronicle chr = new IndexedChronicle(basePrefix);
        final Excerpt excerpt = chr.createExcerpt();
        excerpt.startExcerpt(this.getmsgtext().length() + 4);
        excerpt.writeBytes(this.getmsgtext());
        excerpt.finish();
        chr.close();

读者-

        String tempPath = System.getProperty("java.io.tmpdir");
        String basePrefix = tempPath +  "chronicle";
        System.out.println("base prefix: " + basePrefix);
        Chronicle chr = new IndexedChronicle(basePrefix);
        final Excerpt excerpt = chr.createExcerpt();

        while (excerpt.nextIndex()) {
                System.out.println("Read string from chronicle: " + excerpt.readByteString());
        }
        chr.close();

解决方法:

I need to have the message removed once i read the Excerpt from the Chronicle.

删除它们的唯一方法是滚动文件.您可以使用IndexedChronicle或使用VanillaChronicle或当前的SingleChronicleQueue自己完成此操作

So if my reader starts again it doesn’t go back to the beginning. Also message is of no use to me once i read it so want to remove it.

标准做法是将您的结果(包括源ID)写入“纪事”.这样,您始终知道哪些消息已成功处理.例如如果发生崩溃,您可能已经阅读了消息,但未处理.

i am trying following code and every time i start reader, i get all the messages again.

这是默认情况下设计的.您如何跟踪正确处理了哪些消息取决于您. (尽管我们建议将其记录在另一个队列中,并阅读最后一条消息以找到该索引)

Is there an option to put a Time to Live on message so it is automatically removed after certain time period.

您可以为每个消息添加时间戳,并忽略旧消息.

Chronicle Queue v4.1.0是最新版本.

上一篇:注解在Java中是如何工作的?


下一篇:Java的通知框架