模拟 Camel 批处理消费者

Mocking a Camel Batch Consumer

我正在编写单元测试来测试我在我的 Spring DSL 中定义的路由是否确实按照我的预期进行

我目前正在尝试测试的路由从目录中读取文件并聚合它们。

我通过在 DSL 中的聚合器元素上使用 completionFromBatchConsumer="true" 属性 来让聚合器知道它何时开始工作。当我实际从文件系统中检索文件时,这很好用。

在我的单元测试中,我想在不进入文件系统的情况下触发路由,所以我一直在尝试 replaceFromWith("direct:start"); 并将其设置为默认模板端点 Uri。这在一定程度上有效,但我从未看到我的聚合器被调用 - 我假设这是因为 from 端点从未通知它批处理已完成。

我怎样才能让聚合器认识到有工作要做。

当您发送到批量大小的直接端点时,您需要在交换中发送 属性。

您需要将 http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Exchange.html#BATCH_SIZE 设置为 1。

聚合器中的逻辑在这里:org.apache.camel.processor.aggregate.AggregateProcessor#isCompleted