1

我使用骆驼 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 个对象元素。

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

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

4

1 回答 1

1

是的,这是 Camel 中的一个小错误。我已经记录了一张票,并在测试中进行了工作修复 https://issues.apache.org/jira/browse/CAMEL-6255

于 2013-04-09T14:32:34.800 回答