2017-12-13 4 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에 대해 여러 번 발생합니다.

언리얼에 대해 이해 한 내용은 기록 파일을 완전히 읽은 경우에만 한 번 발생해야합니다.

다중 읽기에 동일한 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

어떻게해야합니까? 삭제할 실제 파일 이름을 얻으시겠습니까? –