java - Camel Splitter 产生 NotifyBuilder 看到的完成交换数量不正确?

标签 java json apache-camel splitter enterprise-integration

我使用的是 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/

相关文章:

java - 为什么在 `HashMap Class` 中的哈希函数中使用 4,20,12,7 这样的数字

java - 如何在java中使用正则表达式替换字符串中的字符?

java - 实现一种算法以确定字符串是否具有所有唯一字符

java - 使用 Gson 将 Java 对象转换为 JsonObject

python - OpenCV(在 C++ 中)到 MQTT 代理

json - Angular Json 管道类型错误 : Converting circular structure to JSON

java - Spring 集成 : TCP Client/Server opening one client connection per server connection

java - Camel 和 Elasticsearch 带屏蔽插件

java - 找不到给定名称的文件

java - 单元测试 Apache-Camel JmsReplyTo 路由流程