45.9. 테일러 커서 소비자의 작동 방식
커서를 테일링 가능 커서로 전환하려면 먼저 커서를 생성할 때 몇 가지 특수 플래그가 MongoDB에 신호를 보낼 수 있습니다. 생성된 후 커서는 열린 상태로 유지되며 새 데이터가 도달할 때까지 MongoCursor.next() 메서드를 호출할 때 차단됩니다. 그러나 MongoDB 서버는 결정되지 않은 기간 후에 새 데이터가 표시되지 않는 경우 커서를 종료할 수 있는 권리를 보유합니다. 새 데이터를 계속 사용하고자 하는 경우 커서를 다시 생성해야 합니다. 그리고 그렇게하기 위해, 당신은 당신이 떠난 위치 또는 다른 곳에서 다시 소비하기 시작해야 할 것입니다.
Camel MongoDB 테일링 가능 커서 소비자는 이러한 모든 작업을 처리합니다. 증가하는 특성의 데이터에서 일부 필드에 키를 제공해야 합니다. 이 키는 다시 생성할 때마다 커서를 배치하기 위한 마커 역할을 합니다(예: 타임스탬프, 순차 ID 등). MongoDB에서 지원하는 모든 데이터 유형일 수 있습니다. 날짜, 문자열 및 정수는 제대로 작동하는 것으로 확인됩니다. 이 구성 요소의 컨텍스트에서 이 메커니즘을 "테일 추적"이라고 합니다.
소비자는 이 필드의 마지막 값을 기억하고 커서를 다시 생성할 때마다 increasingField > lastValue 와 같은 필터를 사용하여 쿼리를 실행하여 읽지 않은 데이터만 소비합니다.
필드 증가 설정: 엔드포인트 URI tail>-<ingIncreasingField 옵션에서 증가하는 필드의 키를 설정합니다. Camel 2.10에서 이 필드에 대한 중첩된 탐색은 아직 지원되지 않으므로 데이터의 최상위 필드여야 합니다. 즉, "timestamp" 필드는 훌륭하지만 "nested.timestamp"는 작동하지 않습니다. 중첩된 증가하는 필드에 대한 지원이 필요한 경우 Camel JIRA에서 티켓을 엽니 다.
커서 재개발 지연: 초기 조정 시 새 데이터를 사용할 수 없는 경우 MongoDB에서 커서를 즉시 강제 종료합니다. 이 경우 서버를 덮어쓸 필요가 없으므로 cursorRegenerationDelay 옵션이 도입되었습니다(기본값: 1000ms).
예를 들면 다음과 같습니다.
from("mongodb:myDb?database=flights&collection=cancellations&tailTrackIncreasingField=departureTime")
.id("tailableCursorConsumer1")
.autoStartup(false)
.to("mock:test");
위의 경로는 "flights.cancellations" capped 컬렉션에서 "departureTime"을 증가하는 필드로 사용하며 기본 재생 커서가 1000ms입니다.