java编年史消息在读取后不会被删除

java编年史消息在读取后不会被删除,java,messaging,chronicle,Java,Messaging,Chronicle,我正在尝试使用JavaChronicle1.9.2来写/读消息。我知道有更新的版本,但在投入更多时间之前,我没有什么问题 一旦我读了《编年史》的摘录,我就需要删除这条消息。 因此,如果我的读者再次开始,它不会回到开始。 而且,一旦我读到这条消息,它对我来说是没有用的,所以我想删除它 有没有这样做的选择?我正在尝试以下代码,每次启动reader时,我都会再次收到所有消息。 还有一个选项可以在消息上放置一个生存时间,这样它在特定时间段后会自动删除 作者- String tempPat

我正在尝试使用JavaChronicle1.9.2来写/读消息。我知道有更新的版本,但在投入更多时间之前,我没有什么问题

一旦我读了《编年史》的摘录,我就需要删除这条消息。 因此,如果我的读者再次开始,它不会回到开始。 而且,一旦我读到这条消息,它对我来说是没有用的,所以我想删除它

有没有这样做的选择?我正在尝试以下代码,每次启动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();
读者-

        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();
一旦我读了《编年史》的摘录,我就需要删除这条消息

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

因此,如果我的读者再次开始,它不会回到开始。而且,一旦我读到这条消息,它对我来说是没有用的,所以我想删除它

标准做法是将结果(包括源id)写入编年史。这样,您就可以始终知道哪些消息已成功处理。e、 g.如果发生崩溃,您可以读取消息,但不进行处理

我正在尝试以下代码,每次启动reader时,我都会再次收到所有消息

这就是默认情况下它的设计目的。如何跟踪正确处理的邮件取决于您。(尽管我们建议将此记录在另一个队列中,并读取最后一条消息以查找该索引)

是否有一个选项可以在消息上放置一个生存时间,以便在特定时间段后自动删除该消息

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


编年史队列v4.1.0是最新版本。

感谢您在我考虑编辑时的快速响应!我想每隔5分钟左右重置一次文件,不管消息是否被读取,因为这是我要分析的最后几分钟的情况。是否有选项重置编年史中的指针(上面的代码)或我删除、重新创建它等。
如果我能够重置索引,所有读者都将获得摘录的最新位置。netIndex()?@chapparprasad是重置它以启动新文件的唯一可靠方法。可以使用clear()进行测试。当您需要在较长时间内保留消息以最大限度地减少日志记录时,通常使用队列,并支持回复来自生产部门的消息以解决错误和性能问题。如何根据上述读卡器代码中的最后5分钟来查找记录?我看到index(long-vIndex)方法,但我是否根据固定的记录大小等计算要传递的vIndex…@chapplarsad索引是写入的消息的编号。您可以获取刚刚编写的邮件的索引并记住它,也可以从末尾开始按索引向后移动--(或从开头开始并向前移动)在最新版本中,一个周期内的索引是可预测的,在以前的版本中,由于实现原因,您可能会获得间隙。获取异常-“Len不能是”+Len+“>255”对邮件大小设置此限制的具体原因是什么?我可能需要一封邮件中包含15-16kb的数据。谢谢