我正在尝试使用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是最新版本.