我们正准备使用Chronicle Queue(SingleChronicleQueue)来记录我们的消息。原型现在正在运行。但是我们遇到了一些问题。
读者可以修改消息吗?我们使用编年史映射来记录读取的索引,以便在重新启动后删除重复的消息。如果这不起作用,我们想要标记读取器端读取的消息。实际上我们已经这样做了。现在的问题是,有时,我们得到的错误消息如“15c77d8be(62)8000003f现在是3f”,我们怀疑这是因为跨越缓存行边界的写入现在不再是原子的。推荐的解决方法是什么?目前我们在消息之前添加一个单字节标记,会添加一个3字节的填充来解决问题吗?
我们可以使用自己的滚动政策吗?我们想使用每小时政策。但每小时策略要求一个包含少于2.56亿条目的文件。我们可以使用自定义滚动循环吗?有什么警告吗?
答案 0 :(得分:0)
一种常见的方法是将消费者的读取索引记录在另一个输出队列中。在重新启动时,只需从输出队列的末尾向后读取,以确定每个消费者的读取序列应该是什么。
在没有看到您的代码的情况下,确定修改现有记录时可能出现的问题有点困难。请注意,插入队列的记录应该是不可变的;不支持从读者线程修改它们。
关于RollCycle的要求,最近添加了LARGE_HOURLY循环,每个循环允许约20亿个条目: