java 历史消息在阅读后不会被删除
java chronicle messages are not removed after reading
我正在尝试使用 Java Chronicle 1.9.2 来 write/read 消息。我知道有较新的版本可用,但在我投入更多时间之前有几个问题。
我需要在阅读编年史摘录后删除该消息。
因此,如果我的 reader 再次开始,它不会回到开头。
另外,我阅读后对我没有用,所以想删除它。
有没有办法做到这一点?我正在尝试遵循代码,每次我开始 reader,我都会再次收到所有消息。
还有一个选项可以在消息上设置生存时间,以便在特定时间段后自动删除它。
作家 -
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();
READER -
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 Chronicle 1.9.2 来 write/read 消息。我知道有较新的版本可用,但在我投入更多时间之前有几个问题。
我需要在阅读编年史摘录后删除该消息。 因此,如果我的 reader 再次开始,它不会回到开头。 另外,我阅读后对我没有用,所以想删除它。
有没有办法做到这一点?我正在尝试遵循代码,每次我开始 reader,我都会再次收到所有消息。 还有一个选项可以在消息上设置生存时间,以便在特定时间段后自动删除它。
作家 -
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();
READER -
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 是最新版本。