2014-12-05 5 views
0

크기가 2GB보다 큰 파일을 구문 분석하고 데이터를 DB로로드해야하는 프로젝트를 진행 중입니다. 나는 낙타 스플리터를 사용하여 50 개의 다른 파일로 파일을 분할 한 다음 Apache Camel을 사용하여 각 파일을 처리 할 계획입니다.낙타 LoadBalancing 및 페일 오버 처리

내 질문은 : 파일 중 하나를 처리하는 동안, 낙타 경로 나 파일 이름으로 DB에서 낙타 경로 및 감사이 막을 수있는 방법에 실패

합니다. 일부 레코드가 처리되어 DB에 업로드되고 특정 레코드가 DB에로드되지 않는 경우가 발생할 수 있습니다. 그래서이 특정 레코드를 다른 파일에 기록해야합니다.

처리 중에도 네트워크 장애로 인한 지원이 중지되면이 시나리오에서는 파일 처리가 완료되지 않습니다. 따라서 나머지 레코드 만 다시 처리해야하므로이 불완전한 파일 처리 시나리오를 처리하는 방법.

+0

아마 스프링 배치와 같은 배치 프레임 워크를 사용하는 것이 좋습니다 (카멜에도 통합 될 수 있음). –

답변

1

들어오는 파일을 분할하려는 경우 레코드에 상호 의존성이 없다고 가정합니다.

대용량 파일을 여러 파일로 분할 한 다음 원본 파일의 컨텍스트를 유지하면서 처리하는 대신 스플리터를 사용하여 큰 입력 파일을 한 줄씩 나눌 수 있습니다. 스플리터는 스트리밍 모드에서 큰 입력 파일을 메모리에 먼저로드하지 않을 때 사용할 수 있습니다. 그런 다음 모든 행을 SEDA/메시지 큐에 놓습니다. 수신 측에서는 병렬 처리를 위해 동시 사용자를 사용합니다.

파일 구성 요소는 현재 처리 된 파일 이름으로 교환 헤더를 설정합니다. 헤더는 분할 및 전송 중에 보존되어야합니다. 소비자 중 하나가 실패하면 소비 경로의 오류 처리기에 로깅 목적의 소스 파일 이름 정보가 있어야합니다. 하나의 메시지가 처리에 실패했을지라도 소비자는 메시지 처리를 계속합니다. 따라서 처리를 시작할 위치를 파악할 필요가 없습니다.