2017-03-04 1 views
0

나는 데이터 큐 (또한 SingleChronicleQueue)에서 처리 한 마지막 요소를 추적하기 위해 SingleChronicleQueue 구현을 사용하고 있습니다.Chronicle 큐에 쓰여진 마지막 요소 읽기하기

충돌에서 복구하려면 내 상태 큐의 마지막 요소를 읽어야합니다.이 큐는 마지막으로 처리 된 데이터 요소의 인덱스를 제공합니다. 이것은 잘 작동하지만 마지막 상태 요소를 찾는 방식에 만족하지 않습니다.

지금 내가하는 일은 대기열의 firstCycle() 및 lastCycle() 메소드를 사용하는 것입니다. 마지막으로 돌아가서 lastCycle() 메서드가 디스크에 존재하거나 존재하지 않을 수있는 사이클 파일에 해당하는 숫자를 반환하기 때문에 이러한 메서드에 의해 지정된 순환 범위에 요소가 있는지 테스트해야합니다. (응용 프로그램이 종료 된 시간에 따라 다름)

첫 번째주기 (데이터 포함)가 발견되면 끝까지 모든 요소를 ​​읽습니다. 이것은 나에게 최종 데이터 인덱스가 처리 된 마지막 상태 요소를 제공합니다.

마지막 상태 요소를 가져 오는보다 우아한 방법이 있습니까? ExcerptTailer.toEnd()를 시도했지만 사이클 파일이 누락 된 경우 작동하지 않았습니다.

답변

2

나는 문제를 생각하여 공유하고 있다고 생각했습니다.

상태 큐의 마지막 요소를 읽으려면 당신은

ExcerptTailer 쇼핑몰을 운영 중이고 = queue.createTailer()을 사용할 수 있습니다; tailer.direction (TailerDirection.BACKWARD) .toEnd();

당신이 조심해야하지만하지 않음) (

queue.acquireAppender() pretouch를 호출합니다.; pretouch() 메서드를 사용하여 만들어야 할 사이클 파일이 만들어지기 전에이 작업을 수행하기 전에

을 사용하십시오. 그 후에 전화가 끝납니다

tailer.direction (TailerDirection.BACKWARD) .toEnd();

은 읽을 수없는 위치에 놓습니다.

참고 : 이는 시간 기록자 대기열을 새주기 파일로 롤오버하도록 설정하는 경우에만 발생합니다.