2017-12-13 5 views
0

CQ:4.5.27。クロニクルキュー - StoreListenerがいつトリガーされるか

シングルchronicleReaderを使用して同じファイルを読み取る書き込み(シングルスレッド)と他のリーダー(Nスレッド)の2つのクロニクルを作成しました。 StoreFileListener onReleaseは、(N、独自のテイラーとスレッド)読者のために呼び出されます

と何回

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; 
} 

}? はじめに私は関心のある読者の数を登録しています。そして、同じ数のリリース信号を受け取ると、私は削除のためにファイルをマークします。 しかし、私はonAcquiredとonReleasedがReaderのために同じファイルに複数回出現するのを見ました。

私がonReasedで理解したことは、クロニクルファイルが完全に読み込まれたときにのみ起こるはずです。

複数の読み込みに同じchronicleReaderを使用できますか?同じクロニクルに複数の読者がいる場合、いくつのリリースイベントを取得できますか? ファイルがリーダーによって解放されても、ライターが同じファイルに書き込んでいる可能性はありますか?

答えて

0

ファイルを複数回取得/解放することは可能です。

ExcerptTailersは複数のスレッド間で安全に共有することはできません。

安全なファイル削除メカニズムを実装したい場合は、各リーダースレッドでExcerptTailer.cycle()を追跡する方がよいでしょう。

queue.storeForCycle(N, 0, false).file();

+0

かもしれサイクルカウントを維持する:すべての読者のテイラー・サイクルは、N + 1に進んだ場合、あなたが呼び出すことにより、サイクルのためのファイルを取り出すことができ、サイクルNに対応するファイルを削除しても安全でなければなりません良いアイデアですが、実装をスレッドセーフで、hftライブラリで管理する方が好きです。 このトピックの私の他の投稿にはもう少し詳細があり、StoreFileListenerを利用したいです https://stackoverflow.com/questions/48078740/chronicle-queue-storefilelistener-multiple-onququired-and-onreleased – AmbGup

+0

どのようにすればいいですか?削除する実際のファイル名を取得しますか? –

関連する問題