2015-01-19 8 views
0

루트가 ItemsItem을 여러 개 가져야합니다. 나는 각 항목을 분리하고 처리하는 스플리터를 가지고있다. 그 후 Collection aggregator를 사용하여 모든 응답을 수집합니다.컬렉션 애그리 게이터가 적절하게 응답을 수집하지 않습니다. ESB

내 흐름에는 모든 응답이 이미 수집기에 도달 했음에도 불구하고 관찰 된 수집 수집기가 무언가를 기다리고 있습니다. 애그리 게이터 (어떤 응답을 기다리고 있기 때문에) 후에 응답이 수집되지 않습니다. 하지만 항목에 항목이 5 개있는 경우 모든 응답은 도달 집계자가됩니다. 하지만 어 그리 게이터가 여전히 출력을 전달하지 않는 이유를 잘 모르겠다. (가끔씩 지나간다.)

나는 aggrgegator에서 30000의 타임 아웃을 지키고 Timeout = "false"에 실패했다면 이제는 전달되었지만 응답 (5 항목).

하지만 저는 메시지가 20000 밀리 초 이내에 수집기에 도달했습니다. 하지만 뭔가 :(기다리고 계속됩니다

수집 애그리 게이터 (aggregator)에서이 문제가 어느 하나를 수행하는 이유

는 단서가?는 config를 찾아주세요 ..

<flow name="Items" doc:name="Items"> 
    <vm:inbound-endpoint exchange-pattern="one-way" path="QUEUE" connector-ref="VM_Q1" doc:name="QUEUE"> 
    </vm:inbound-endpoint> 
    <splitter expression="#[xpath('/Items/Item')]" doc:name="Splitter"/> 
    <vm:outbound-endpoint exchange-pattern="one-way" path="OUT1" connector-ref="MAIN_VM" doc:name="Test Queue"> 
</flow> 

    <flow name="Items1" doc:name="Items"> 
    <vm:inbound-endpoint exchange-pattern="one-way" path="OUT1" connector-ref="MAIN_VM" doc:name="Test Queue"/> 
.............doing some transformation and processing..... 
<collection-aggregator failOnTimeout="true" doc:name="Collection Aggregator"/> 
    </flow> 

버전을 사용 :.. 3.5.1 어떻게 우리는? 내가 보관 한 로거 대기 정확히 추적하고 모든 5 개 항목을 집계하기 전에 채우는되어 확인 할 수 도움말 더 appreciated.Thanks 될 것

편집을 :.. 로그 스플리터 구성 요소 후 항목

의 각 반복을@ 데이비드 제안하십시오 수집 애그리 게이터 (aggregator)

Before Collection Aggregator:{MULE_CORRELATION_SEQUENCE=1, MULE_CORRELATION_GROUP_SIZE=5, MULE_ENCODING=UTF-8, MULE_CORRELATION_ID=13783281-a036-11e4-a356-b8ee652d2686, Content-Type=text/plain;charset=UTF-8} 
    Before Collection Aggregator:{MULE_CORRELATION_SEQUENCE=2, MULE_CORRELATION_GROUP_SIZE=5, MULE_ENCODING=UTF-8, MULE_CORRELATION_ID=9f7447b1-a03b-11e4-85dd-b8ee652d2686, Content-Type=text/plain;charset=UTF-8} 
    Before Collection Aggregator:{MULE_CORRELATION_SEQUENCE=2, MULE_CORRELATION_GROUP_SIZE=5, MULE_ENCODING=UTF-8, MULE_CORRELATION_ID=9f7447b1-a03b-11e4-85dd-b8ee652d2686, Content-Type=text/plain;charset=UTF-8} 
    Before Collection Aggregator:{MULE_CORRELATION_SEQUENCE=2, MULE_CORRELATION_GROUP_SIZE=5, MULE_ENCODING=UTF-8, MULE_CORRELATION_ID=9f7447b1-a03b-11e4-85dd-b8ee652d2686, Content-Type=text/plain;charset=UTF-8} 
Before Collection Aggregator:{MULE_CORRELATION_SEQUENCE=2, MULE_CORRELATION_GROUP_SIZE=5, MULE_ENCODING=UTF-8, MULE_CORRELATION_ID=9f7447b1-a03b-11e4-85dd-b8ee652d2686, Content-Type=text/plain;charset=UTF-8} 

전에 63,210

After splitter:{MULE_CORRELATION_SEQUENCE=1, MULE_CORRELATION_GROUP_SIZE=5, MULE_ENCODING=UTF-8, MULE_CORRELATION_ID=9f7447b1-a03b-11e4-85dd-b8ee652d2686} 
After splitter:{MULE_CORRELATION_SEQUENCE=2, MULE_CORRELATION_GROUP_SIZE=5, MULE_ENCODING=UTF-8, MULE_CORRELATION_ID=9f7447b1-a03b-11e4-85dd-b8ee652d2686} 
After splitter:{MULE_CORRELATION_SEQUENCE=3, MULE_CORRELATION_GROUP_SIZE=5, MULE_ENCODING=UTF-8, MULE_CORRELATION_ID=9f7447b1-a03b-11e4-85dd-b8ee652d2686} 
After splitter:{MULE_CORRELATION_SEQUENCE=4, MULE_CORRELATION_GROUP_SIZE=5, MULE_ENCODING=UTF-8, MULE_CORRELATION_ID=9f7447b1-a03b-11e4-85dd-b8ee652d2686} 
After splitter:{MULE_CORRELATION_SEQUENCE=5, MULE_CORRELATION_GROUP_SIZE=5, MULE_ENCODING=UTF-8, MULE_CORRELATION_ID=9f7447b1-a03b-11e4-85dd-b8ee652d2686} 

로그인합니다. MULE_CORRELATION_SEQUENCE = 2이 (가) 여러 번 반복됩니다. 그러나 페칭 페이로드는 correct_seq = 2 각각에 대해 정확하고 다릅니다. 이 문제가 어떻게 해결 될 수 있습니까?

+1

'Items1'에서받은 메시지에 대한'MULE_CORRELATION_ID','MULE_CORRELATION_GROUP_SIZE' 및'MULE_CORRELATION_SEQUENCE' 속성의 값을 기록 할 수 있습니까? 이것들이 aggregation이 올바르게 작동하는지 궁금합니다. –

+0

@DavidDossot 당신은 틀림없이 정확했습니다. 나는 스플리터와 로그 수집 수집기 전에 로그 후 내 질문을 편집했습니다. 제발 한 눈에. MULE_CORRELATION_SEQUENCE = 2가 여러 번 반복되는 것으로 관찰되었습니다 (seq = 3,4,5를 허용하지 않음). 이 시나리오를 어떻게 제거 할 수 있습니까? – star

+0

@DavidDossot 일부 수집 수집기가 전달됩니다 (응답 전파). 그러한 경우에도 MULE_CORRELATION_SEQUENCE = 2가 위의 실패 시나리오처럼 반복되는 것을 관찰했습니다. 하지만 여기 수집 수집기가 성공하고 있습니다. 어떻게 예측할 수 있을지 모르겠습니다. 예 : 5 건을 호출하면 4 건 중 하나가 실패 (메시지가 어 그리 게이터에서 수집되지 않음)이고 1 건이 성공합니다 (어 그리 게이터가 메시지를 전달할 수 있음). – star

답변

1

doing some transformation and processing의 내용이 이러한 컨트롤 속성에 손상을 주어 집계가 작동하지 않는다고 생각됩니다.

위와 같이 보이지 않는 부분을 손가락으로 가리키기는 쉽지만 로그에는 제어 속성의 명확한 변경 사항이 표시되므로이 추출 된 블록의 어딘가에서 발생해야합니다.

+0

정보를 제공해 주셔서 감사합니다. 문제가있는 문제는 Item2 흐름에 캐시가 있습니다.처음으로 캐시 'MULE_CORRELATION_SEQUENCE = 2'에 도달하고 캐시에 저장되었지만 다른 시퀀스가 ​​'MULE_CORRELATION_SEQUENCE = 3'에 도달하면 곧바로 'MULE_CORRELATION_SEQUENCE = 2'(으)로 인쇄됩니다. 다른 사람들도 마찬가지입니다. 페이로드 만 캐시에 저장 될 것으로 예상했지만 모든 OUTBOUND 속성도 저장하고 있습니다. 그래서 외부 적으로 변수에 속성을 저장하고 캐시에서 일단 복원하고 있습니다. 그러나 이것은 올바른 방법입니까?. – star

+0

캐시에 OUTBOUND 속성을 저장하지 못하게하는 방법이 있습니까? 그래서 페이로드 만 저장합니다. 캐시 외부에있는 모든 OUTBOUND 특성 (콜렉션과 관련된)을 외부에 저장하고 캐시 후에 다시 설정하는 것을 중지합니다. 또한 나는 확실하지 않다. 나는 현재 올바른 접근법을하고있다. 그러나 그것은 효과적이다. 이것에 대해 제발 제안 해주십시오. – star

+0

캐싱에 무엇을 사용합니까? –