重庆:4.5.27。
我创建了 2 个编年史,其中一个用于写入(单线程)和其他读取器(N 个线程)使用单个 ChronicleReader 读取同一文件。
SingleChronicleQueue chronicleWriter = chronicleFactory.createChronicle("Writer", path, RollCycles.MINUTELY);
SingleChronicleQueue chronicleReader = chronicleFactory.createChronicle("Reader", path, RollCycles.MINUTELY);
public class ChronicleFactory {
ChronicleProcessorImpl chronicleProcessor = new ChronicleProcessorImpl();
public SingleChronicleQueue createChronicle(String instance, String persistenceDir, RollCycles rollCycles) {
SingleChronicleQueue chronicle = null;
try {
chronicle = SingleChronicleQueueBuilder.binary(persistenceDir).rollCycle(rollCycles).storeFileListener(new StoreFileListener() {
@Override
public void onReleased(int i, File file) {
System.out.println(Thread.currentThread().getName() + " onReleased called for file: " + file.getAbsolutePath());
//chronicleProcessor.onRead(file);
}
@Override
public void onAcquired(int cycle, File file) {
System.out.println( Thread.currentThread().getName() + " onAcquired called for file: " + file.getAbsolutePath());
}
}).build();
} catch (Exception e) {
e.printStackTrace();
}
return chronicle;
}
}
何时以及多少次为 Reader 调用 StoreFileListener onRelease(N 线程与他们自己的 tailer)?一开始我注册了一些感兴趣的读者,一旦我收到相同数量的发布信号,我将文件标记为删除。但我已经看到 onAcquired 和 onReleased 在 Reader 的同一个文件上多次出现。
我所理解的 onReleased 应该只在完全读取编年史文件时发生一次。
我可以使用同一个 ChronicleReader 进行多次读取吗?如果我在同一个编年史中有多个阅读器,我将获得多少个发布事件?是否也有可能一个文件被阅读器释放,但作家仍然在同一个文件上写?