예.
예 아키텍처는 다음과 같이 보일 수 있습니다
당신은 설정 (각 개별 파일의 위치를 사용하는 어떤 식별자 또는) 파일 이름으로 채워 할 수있는 간단한 큐를 할 수
- .
- 대기열에서 메시지 변환기 bean을 통해 라우트 할 수 있습니다. 메시지 변환기 Bean은 파일의 첫 번째 행에있는 메타 데이터가 들어있는 POJO로 파일 이름에 대한 요청을 변환합니다.
- (여기서 몇 가지 옵션이)
출력 또는 1000 개 라인 세트로부터 생성 된 결과 데이터가 필요로하는지 여부에 따라 달라진다 1000 개 행 세트를 처리하는 접근 방식은 하나의 메시지로 재구성하고 처리 할
- 나중에 다시. 그렇다면 메시지 생성자/소비자, 메시지 집합자 및 라우터로 구성된 구성된 메시지 프로세서를 구현할 수 있습니다. 메시지 생성자/사용자는 step2에서 생성 된 메타 데이터로 POJO를 수신하고 파일의 모든 행을 처리하는 데 필요한 많은 새 요청이있을 때 대기열에 넣습니다. 라우터는이 큐에서 처리 파이프 라인을 통해 메시지 수집기로 라우팅합니다. 통합되면 모든 중요한 데이터가 포함 된 단일 통합 메시지를 통해 원하는 작업을 수행 할 수 있습니다.
- 대신 각 1000 줄 집합을 독립적으로 처리 할 수 있고 다시 가입 할 필요가없는 경우 메시지를 일회용으로 집계 할 필요가 없습니다. 대신 라우터를 사용하여 2 단계에서 프로듀서/소비자로 라우팅 할 수 있습니다. 위에서와 같이 각 파일에 대해 필요한 새 요청 수를 줄입니다. 마지막으로, 라우터는이 최종 대기열에서 처리를 수행 할 소비자로 라우팅합니다.
당신이 다루는 많은 양의 데이터를 가지고 있기 때문에, 가능성들이 큐에 배치되고, 특히, 메시지를 통해 데이터의 약 1,000 라인 그룹을 통과하기 어려울 것 (당신이 돈 ' 기억이 부족하다). 특정 요청이있는 파일의 행을 식별하는 데 사용할 수있는 표시기 유형을 전달한 다음 필요할 때 1000 행을 분석하는 것이 좋습니다. 특정 행의 파일에 대한 바이트 수를 계산 한 다음 파일 판독기의 skip() 메소드를 사용하여 요청이 Bean에 도달 할 때 해당 행으로 점프하는 등 여러 가지 방법으로이 작업을 수행 할 수 있습니다 그것을 처리합니다.
감사 : 여기
내가 위에서 언급 한 엔터프라이즈 통합 패턴을 설명하는 아파치 낙타의 웹 사이트에서 제공되는 일부 자원입니다 상세한 답변을! 제가 확인하겠습니다! – user3385957