0

我们正准备使用 Chronicle Queue (SingleChronicleQueue) 来记录我们的消息。原型现在正在工作。然而我们有一些问题。

读者可以修改消息吗?我们使用编年史地图来记录读取的索引,以在重新启动后删除重复的消息。如果这不起作用,我们希望标记在阅读器端读取的消息。实际上我们已经这样做了。现在的问题是,有时我们会收到类似“15c77d8be (62) was 8000003f is 3f”之类的错误消息,我们怀疑这是因为现在跨缓存行边界的写入不再是原子的。推荐的解决方法是什么?目前我们在消息前添加一个字节的标签,添加一个3字节的填充会解决问题吗?

我们可以使用自己的滚动策略吗?我们想使用按小时计费的策略。但每小时政策要求文件包含少于 2.56 亿个条目。我们可以使用我们的自定义滚动周期吗?有什么注意事项吗?

4

1 回答 1

0

一种常见的方法是将消费者的读取索引记录在另一个输出队列中。重新启动时,只需从输出队列的末尾向后读取,以确定每个消费者的读取顺序应该是什么。

在没有看到您的代码的情况下,很难确定尝试修改现有记录可能会出现什么问题。请注意,插入队列的记录应该是不可变的;不支持从阅读器线程修改它们。

关于您的 RollCycle 要求,最近添加了 LARGE_HOURLY 循环,每个循环允许约 20 亿个条目:

https://github.com/OpenHFT/Chronicle-Queue/blob/master/src/main/java/net/openhft/chronicle/queue/RollCycles.java#L27

于 2017-12-11T14:23:26.823 回答