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를 사용할 수 있습니까? 그리고 같은 기록에 여러 독자가 있다면 얼마나 많은 공개 이벤트를 얻을 수 있습니까? 파일이 독자가 출시 할 수도 있지만 여전히 작가가 같은 파일에 쓰고 있습니까?
상태 유지 사이클 카운트가 될 수있다 : 모든 독자 '쇼핑몰을 운영 중이고주기가 N + 1로 진행하는 경우, 호출하여 당신은 사이클의 파일을 검색 할 수 있습니다 사이클 N.에 해당하는 파일을 안전하게 제거 할 수 있어야한다 좋은 생각이지만 스레드를 안전하게 구현하고 hft 라이브러리에서 관리하도록 구현을 선호합니다. 이 항목의 다른 게시물에는 세부 정보가 조금 더 있습니다. StoreFileListener를 사용하고 싶습니다. https://stackoverflow.com/questions/48078740/chronicle-queue-storefilelistener-multiple-onququired-and-onreleased – AmbGup
어떻게해야합니까? 삭제할 실제 파일 이름을 얻으시겠습니까? –