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