2013-02-25 1 views
2

효과적으로 플러시를 원하거나 aggregator의 모든 집계에 대해 completionSize를 원합니다. 글로벌 완성품처럼.Apache Camel - Aggregator를 'flush'로 만듭니다.

기본적으로 배치에 들어있는 모든 메시지를 집계 한 다음 마지막 집계가 수집 될 때 해당 집계의 모든 집계가 한 번에 완료되도록해야합니다.

e.g. 1000 messages arrive (the length is not known beforehand) 

    aggregate on correlation id into bins 
     A 300 
     B 400 
     C 300 (size of the bins is not known before hand) 

    I want the aggregator not to complete until the 1000th exchange is aggregated 
    thereupon I want all of the aggregations in the aggregator to complete at once 

CompleteSize는 전체적으로 통합자가 아니라 각 집계에 적용됩니다. 따라서 CompleteSize (1000)를 설정하면 각 집계가 완료되기 전에 각 집계가 1000을 초과해야하기 때문에 완료되지 않습니다.

단일 Map 객체를 작성하여 주변을 둘러 볼 수는 있지만 이는 일종의 sidestepping입니다 이상적으로 사용하는 것이 가장 바람직한 aggregator2의 상관 관계입니다.

그렇기 때문에 전체 크기 또는 플러시를 지능적으로 수행하는 방법이 있습니까?

답변

3

하나의 옵션은 단순히 낙타 2.9로 ... 가능한

을 글로벌 카운터를 유지하기 위해 일부 로직을 추가하고 도달되면 Exchange.AGGREGATION_COMPLETE_ALL_GROUPS 헤더를 설정하는 것입니다 ... 당신은 수동으로 모든 현재 집계 교환을 완료 할 수 있습니다 Exchange.AGGREGATION_COMPLETE_ALL_GROUPS 헤더가 포함 된 메시지를 true로 설정하여 보내십시오. 메시지는 신호 메시지로만 간주되며, 메시지 머리글/내용은 다르게 처리되지 않습니다.

+0

정말 고마워요, 당신이 지적 했으니 까 문서에서 보았습니다.하지만 이전에 읽은 것을 결코 눈치 채지 못했습니다. –

+0

좋은 답변이지만, 나는이 방법을 구현했다고 믿을 수 없다. 빈칸에 손을 대고 길을 코딩하지 않으면 너무 부정하고 라우트의 논리가 너무 나빠질 것이다. 가까운 조건이 충족되면 머리글과 함께, 그것은 심각하게 못 생겼어. 그러나 완벽한 대답, 감사합니다. –

+0

어떻게하면 좋을까요? –

0

나는 Camel aggregator eip doc http://camel.apache.org/aggregator2을보고 다른 완료 조건을 읽어 보시기 바랍니다. Ben이 말한 특별한 메시지는 모든 비행 중 집계를 완료하기 위해 신호를 보낼 수 있음을 나타냅니다.

배치 소비자에서 섭취하는 경우 http://camel.apache.org/batch-consumer.html 일괄 처리가 완료되면 완료되는 특수 완료를 사용할 수 있습니다. 예를 들어 JPA 데이터베이스 테이블 등에서 파일이나 행을 가져 오는 경우 일괄 처리 소비자의 모든 메시지가 처리되면 aggregator는 completionFromBatchConsumer 옵션을 사용하여 이러한 모든 집계 된 메시지의 완료를 알릴 수 있습니다.

또한 Camel in Action 책의 사본이있는 경우, 제 8 장 8.2 절을 더 자세히 설명하는 집계 EIP에 관한 모든 내용으로 읽으십시오.

+0

보기 이러한 종류의 작동하지만 CamelBatchSize가 분할 된 파일 (일괄 처리)에 기본적으로 '1'로 잘못 설정되어있는 것 같습니다. 따라서 Exchange.BATCH_SIZE를 파일의 레코드 수에 수동으로 고정 시키면 작동합니다. 분할이 일괄 처리 크기로 묶여 있고 적절한 양을 소비한다면 좋을 것입니다. 그래서 이것은 상자 밖에서 작업을하지 않습니다. 나는 기회가 생기면 8.2를 더 자세하게 다룰 것이다. –