为 ChronicleQueue 保存 consumer/tailer 读取偏移量

Save consumer/tailer read offset for ChronicleQueue

我正在探索 ChronicleQueue 以保存在我的一个 application.I 中生成的事件,在某些 processing.I 有多个实例后,我想将保存的事件按其原始发生顺序发布到另一个系统我的应用程序和每个实例都可以 运行 一个单线程附加器来将事件附加到 ChronicleQueue.Although 跨实例排序是必要的,我想了解这两个问题。

1)如何保存我的事件的读取索引,这样我就不会多次从编年史队列中读取和发布相同的消息。

在下面的代码中(摘自 github 中的示例)索引被保存直到我们到达队列的末尾,而我们在 application.The 到达队列末尾的那一刻重新启动,我们最终再次从 start.I 读取所有消息想要确保对于由裁缝 ID 标识的特定消费者,消息是只读的 once.Do 我需要将读取索引保存在另一个队列中并用它来实现我在这里需要的东西。


String file = "myPath";
try (ChronicleQueue cq = SingleChronicleQueueBuilder.binary(file).build()) {
  for(int i = 0 ;i<10;i++){
    cq.acquireAppender().writeText("test"+i);
  }
}


try (ChronicleQueue cq = SingleChronicleQueueBuilder.binary(file).build()) {
    ExcerptTailer atailer = cq.createTailer("a");
    System.out.println(atailer.readText());
    System.out.println(atailer.readText());
    System.out.println(atailer.readText()); 
}

2)如果有办法跨实例保持事件顺序,还需要一些建议。

使用命名的tailer 应该确保tailer 只读取一次消息。如果您有一个没有发生这种情况的示例,您可以创建一个测试来重现它吗?

队列中条目的顺序在写入时是固定的,所有的tailer都以相同的顺序看到相同的消息,没有任何选项。