2013-04-06 5 views
1

Cam을 사용하는 임 2.10.3.Camel Splitter가 NotifyBuilder에서 확인한 완료된 교환 수를 잘못 생성합니까?

from("direct:split") 
    .routeId("split-ti-analytics-events") 
    .split().method(JsonArraySplitter.class,"split") 
    .parallelProcessing() 
    .log("Received: ${body}") 
    .to("stub:direct:somewhere"); 

그리고 NotifyBuilder와 다음은 내 스플리터가 무엇을가한다고하고있다 주장하는 것을 수행하는 테스트 클래스 :

의 나는 다음과 같이 보입니다 경로를 가정 해 봅시다. 그 JSON 배열에서 7 개 개체 요소가 어디

[{},{},{},{},{},{},{}] 

:

@Test(description = "Asserts that when we receive a json event that we properly split the " + 
      "events if the payload was a json array.") 
public void testReceiveTiAnalyticsArrayOfJsonEvents() { 
    NotifyBuilder notifier = new NotifyBuilder(context) 
     .wereSentTo("stub:direct:somewhere") 
     .whenExactlyDone(7) 
     .create(); 
     producerTemplate.sendBody("direct:split", sampleEventsInArrayJsonString); 

     assertTrue(notifier.matches(5, TimeUnit.SECONDS)); 
} 

그리고 sampleEventsInArrayJsonString 가정

처럼 보이는 JSON 배열입니다.

테스트가 거의 즉시 실패합니다. 그러나 테스트 결과에는 "Received : {}"의 7 개 로그 메시지가 명확하게 표시됩니다.

이제 재미있는 부분이 있습니다 ... .whenExactlyDone (8)을 설정하면 NotifyBuilder에서 테스트가 통과합니다. 8 번째 메시지는 어디에서 오는가? 나는이 테스트가 유효하다는 것을 말하고 싶다. 적어도 json 배열로부터 분리 된 메시지를 받는다는 것을 알기 때문에 하루 만에 호출한다. (NotifyBuilder에서 내용을 검증하지 않는다는 사실을 무시한다.) 그러나 나는 실제로는 8 번째 교환기가 속하지 않은 경로를 통해 전송되는 것에 대해 우려했습니다. NotifyBuilder가 7 대신 해당 경로를 통해 수행되는 8 건의 교환을 보는 이유는 무엇입니까?

+0

어떤 Camel 버전을 사용합니까? –

+0

@ClausIbsen 2.10.3 – whaley

답변

1

예 이건 낙타의 작은 버그입니다. 테스트에 티켓과 작동중인 픽스를 기록했습니다. https://issues.apache.org/jira/browse/CAMEL-6255

+0

발견 된 버그이며 낙타 버전 2.10.5, 2.11.0에서 수정 된 것으로 표시 되었기 때문에 대답을 수락합니다. – whaley