2016-12-30 1 views
0

큰 파일을 처리하는 프로세스가 있습니다. 우리는 스플리터를 사용하고 streaming()을 사용하고 있습니다.스트리밍 할 때 CamelSplitComplete를 사용할 수 있습니까?

docs는 낙타가 청크 입력 메시지를 분할합니다 즉, 스트리밍 방식으로 분할합니다 사용하도록 설정 한 경우

스트리밍 말한다. 이렇게하면 메모리 오버 헤드가 줄어 듭니다. 예를 들어 큰 메시지를 분할하는 경우 스트리밍을 사용하도록 설정하는 것이 좋습니다. 스트리밍이 활성화 된 경우 하위 메시지 응답은 예를 들어 순서대로 다시 순서대로 집계됩니다. 사용 중지되면 Camel은 하위 메시지 응답을 분할 된 순서와 동일한 순서로 처리합니다.

그래서 교환이 순서없이 집계 될 수 있음을 알고 있습니다. 그렇다면 스플리터는 CamelSplitComplete를 true로 설정하여 처리하는 마지막 교환을 표시합니까? 그렇다면 순서가 맞지 않아 모든 메시지를 집계하기 전에 집계를 완료하는 것으로 끝날 것입니다. 이로 인해 데이터가 누락 될 수 있습니다.

마지막으로 집계 할 마지막임을 알고있을 때만 CamelSplitComplete를 표시하면 대신 사용할 수 있다고 생각합니다.

업데이트 : 위의 경우 CamelSplitComplete에 의지하는 것이 안전하다고 가정 할 때 내 경로가 필터링하는 경우 안전하게 사용해도 안전합니까? 나는 마지막 행이 필터 기준과 일치하고 제거 될 수 있기 때문에 그렇지 않다고 가정합니다.

+1

필터를 사용할 때 CamelSplitComplete에서 릴레이하지 마십시오. – Sagar

+0

@ sagar 감사합니다. 예, 우리가 어려운 길을 배웠습니다. –

답변

0

스트리밍과 함께 큰 파일을 분할했으며 분할이 완료된 후 CamelSplitComplete 속성을 사용하여 일부 처리를 수행했습니다. 그래서 네, 당신은 마지막 교환이 될 수 있습니다. 물론 테스트를 검증하기 위해 카멜 단위 테스트를하는 것이 가장 좋습니다. 그러나 그것은 나를 위해 일했습니다. 필터에 대해 말할 수는 없지만 마지막 교환을 필터링하면 어떻게 될까요?

+0

그래, 작은 파일에 일부 로깅을 추가하고 무슨 일이 일어나는지 알아야합니다. –

관련 문제