当前位置: 首页 > 知识库问答 >
问题:

NotifyBuilder看到的骆驼分离器产生不正确的完成交换数?

宇文兴言
2023-03-14

我正在使用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");

一个测试类在通知生成器之后执行该操作,以断言我的拆分器正在执行它应该执行的操作。

@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条“已收到:{}”的日志消息。

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

共有1个答案

米承嗣
2023-03-14

是的,这是骆驼的一只小虫子。我已经在测试中记录了一张罚单和一个有效的修复程序https://issues.apache.org/jira/browse/CAMEL-6255

 类似资料:
  • 我正在尝试设置服务总线。我尝试创建的第一个服务应该将SOAP转换为JSON。我创建了一个endpoint和一个WSDL都测试成功。当我尝试转换消息时,程序返回一个NullPointerException。 我在process函数中输出了以下数据: 交换[ID-91a89d0e303b-36665-1571915569757-0-2][消息:[com.example.UpsertItemReques

  • 我在用spring Boot测试我的骆驼上下文时遇到了一些问题。 我使用的是spring boot 1.5.6、spock 1.1-groovy-2.4、camel 2.19.2和camel-spring-boot-starter 2.19.2。 我使用的是spock模拟,我使用的是类中的。我所有的bean都使用构造函数注入。我正在将一个模拟的注入到一个处理器中,我还将它注入到我的测试类中以定义交

  • 我已经创建了一个服务代理。 代理(请求类型为)和实际服务(请求类型。)之间有一个处理器。 进入< code > process(Exchange Exchange)方法的交换体属于< code>TypeA。 我能够使用下面的代码行访问数据 现在,我想将此信息更改为。 我使用下面的代码添加主体。 我得到了 现在,我想使用调用真正的服务,它来自。 我尝试进入处理器,但出现以下异常 真正的Web服务没有

  • 在Apache Camel中是否有可能注册一个处理程序来管理由于已达到延续超时而无法写入jettyendpointhttp响应的交换?

  • 我正在设置路由1中骆驼交换的属性。我正在尝试在拆分器内的第二条路由中更新该属性。但是在拆分器的第二次迭代中,我得到的是我在路由1中设置的原始值,而不是新的更新值。下面是我正在尝试的示例。。 豆子里面: 为什么不更新属性?甚至我也试着在标题中设置。同样的结果。非常感谢。

  • 脚本: CSV文件被发送到我的endpoint,Pojo将java数据和消息转换为我的一条路由,比如(“direct:consume”)路由,然后处理器处理该文件,处理消息并创建新的输出 问题: 文件只包含代码中断的一行 文件包含多行代码工作 尝试: 试图找到一种方法来确定交易记录的数量。getIn()。getBody() 阅读stackoverflow 阅读有关exchange的文档 在不知道记