我正在尝试在Camel Route中构建一个使用REST endpoints 的Split / Aggregate模式 . 它需要一个包含请求详细信息列表的请求对象 . 我想并行处理请求详细信息,然后将聚合结果返回给调用者 . 我希望这是一个同步通话 .
这是我的路线中的代码 .
from("{{generate.route.endpoint}}")
.routeId(EXAMPLE_ROUTE_ID)
.split().method(RequestDetailsSplitter.class).stopOnException().parallelProcessing()
.to("direct:processRequestDetails")
.aggregate(header(TRANSACTION_ID_PARAM), responseAggregator)
.completionSize(simple("${property.CamelSplitSize}"))
.completionTimeout(5000L).parallelProcessing()
.log(LoggingLevel.INFO, "After Aggregation ---> ${body}")
.end()
.removeHeaders("*")
.setHeader(Exchange.HTTP_RESPONSE_CODE,
simple(String.valueOf(HttpStatus.SC_CREATED)));
我希望调用的结果是Aggregate调用的输出,我的响应对象 . 但实际上我得到的是REST调用返回的请求对象?
当我添加更多日志记录语句时,我可以看到Split调用正在触发多个线程,这很棒 . 我可以通过我想要的响应看到'After Aggregation --->'上面的日志语句,这有它自己的线程 . 但是这个输出会发生什么?如何将其恢复到我的默认Exchange,以便它可以返回到REST调用 .
1 回答
来自Apache Camel: Splitter:
如果要聚合分割的结果,您只需要: