阅读后不会删除 java 编年史消息

标签 java messaging chronicle

我正在尝试使用 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)写入 Chronicle。这样您就可以始终知道哪些消息已被成功处理。例如如果发生崩溃,您可以读取消息但不处理消息。

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 编年史消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36103016/

相关文章:

java - java的通知框架

java - ChronicleMap 条目的最大数量

java - 使用Java.io.*读取文件

java - IntelliJ 不运行更新的代码并运行以前分支的代码

android - Android 上的即时消息?

android - 如何将Android App用作Kafka的 "Producing client"?

react 堆测试失败

java - Chronicle 产品支持 32 位 JVM 和 Java 8

java - Maven Jar Plugin 和 Maven Source Plugin 有什么区别?

java - 从纪元以来的几天获取 java.util.Calendar