我使用的是 Camel 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: {}”日志消息。
现在,这是有趣的部分......在 NotifyBuilder 中,如果我设置 .whenExactlyDone(8),那么测试就会通过。第 8 条消息到底来自哪里?我想说这个测试是有效的,然后就到此为止了,因为我知道它至少从该 json 数组中分离出消息(忽略了我没有验证 NotifyBuilder 中的内容的事实),但我担心实际上有通过不属于的路由发送的第 8 个交换。 NotifyBuilder 看到通过该路由完成的 8 次交换而不是 7 次的原因是什么?
最佳答案
是的,这是 Camel 中的一个小错误。我已经记录了一张票,并在测试中进行了有效修复 https://issues.apache.org/jira/browse/CAMEL-6255
关于java - Camel Splitter 产生 NotifyBuilder 看到的完成交换数量不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15849116/