我正在使用骆驼2.10.3。

假设我有一条看起来像以下路线的路线:

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


一个测试类使用NotifyBuilder来断言我的分割器,它正在做应该做的事情。

@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数组:

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


该json数组中有7个对象元素。

测试将立即失败。但是,测试的输出清楚地显示了7条日志消息“ Received:{}”。

现在,这是有趣的部分...如果我设置了.whenExactlyDone(8),则在NotifyBuilder中通过测试。第八条消息将从何而来?我只想说这个测试是有效的,并称它为一天,因为我知道它至少从该json数组中分离出了消息(忽略了我不在验证NotifyBuilder中内容的事实),但是我担心实际上通过不属于您的路线发送了第8个交换。为什么NotifyBuilder看到通过该路由进行的8次交换而不是7次?

最佳答案

是的,这是骆驼中的一个小bug。我已经记录了一张票,并在测试中找到了可行的解决方案
https://issues.apache.org/jira/browse/CAMEL-6255

09-18 19:39