Apache camel Apache Camel拆分和聚合丢失聚合交换的结果

Apache camel Apache Camel拆分和聚合丢失聚合交换的结果,apache-camel,Apache Camel,我试图在使用REST端点的驼峰路由中构建一个拆分/聚合模式。它接受一个包含请求详细信息列表的请求对象。我希望并行处理请求细节,然后将聚合结果返回给调用方。我希望这是一个同步呼叫 这是我路线上的密码 from("{{generate.route.endpoint}}") .routeId(EXAMPLE_ROUTE_ID) .split().method(RequestDetailsSplitter.class).stopOnException().parallelProcessi

我试图在使用REST端点的驼峰路由中构建一个拆分/聚合模式。它接受一个包含请求详细信息列表的请求对象。我希望并行处理请求细节,然后将聚合结果返回给调用方。我希望这是一个同步呼叫

这是我路线上的密码

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)));
我希望调用的结果是聚合调用(我的响应对象)的输出。但我实际得到的是REST调用返回的请求对象

当我放入更多日志语句时,我可以看到Split调用正在触发多个线程,这非常好。我可以看到上面的log语句“After Aggregation-->”以及我想要的响应,它有自己的线程。但是这个输出会发生什么呢?如何将其返回到默认的Exchange中,以便它可以返回到REST调用

来自:

拆分器返回的内容

骆驼2.3及更新版本:

默认情况下,拆分器将返回原始输入消息

适用于所有版本

您可以通过将自己的策略作为聚合策略来覆盖这一点

如果要聚合拆分结果,只需执行以下操作:

from("{{generate.route.endpoint}}")
   .routeId(EXAMPLE_ROUTE_ID)
   .split().method(RequestDetailsSplitter.class, responseAggregator)
           .stopOnException().parallelProcessing()
           .to("direct:processRequestDetails")
           .end()            
   .log(LoggingLevel.INFO, "After Split aggregate ---> ${body}")
   .removeHeaders("*")
   .setHeader(Exchange.HTTP_RESPONSE_CODE, simple(String.valueOf(HttpStatus.SC_CREATED)));