我正在尝试使用Java Chronicle 1.9.2来编写/读取消息。我知道有更新的版本,但在我投入更多时间之前几乎没有问题。
一旦我阅读了“纪事报”的摘录,我就需要删除这条消息。 因此,如果我的读者再次开始,它不会回到开头。 一旦我阅读它,消息对我没用,所以想要删除它。
有选择吗?我正在尝试使用代码,每次我启动阅读器时,我都会再次收到所有消息。 还有一个选项可以将消息设置为生存时间,以便在特定时间段后自动删除。
WRITER -
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();
答案 0 :(得分:3)
一旦我阅读了“纪事报”的摘录,我就需要删除这条消息。
删除它们的唯一方法是使用文件滚动。您可以使用IndexedChronicle或使用VanillaChronicle或当前的SingleChronicleQueue
自行完成此操作因此,如果我的读者再次开始,它就不会回到开头。一旦我阅读它,消息对我没用,所以想要删除它。
标准做法是将结果(包括源ID)写入纪事。这样,您始终可以知道哪些消息已成功处理。例如如果发生崩溃,您可以读取消息但不处理。
我正在尝试使用代码,每次启动阅读器时,我都会再次收到所有邮件。
这就是它默认设计的目的。如何跟踪正确处理的邮件取决于您自己。 (虽然我们建议将其记录在另一个队列中并读取最后一条消息以查找该索引)
是否可以选择将生存时间置于消息上,以便在特定时间段后自动删除。
您可以为每封邮件添加时间戳,并忽略旧邮件。
Chronicle Queue v4.1.0是最新版本。