gpt4 book ai didi

apache-camel - Apache Camel Split 和 Aggregate Looses 聚合交换的结果

转载 作者:行者123 更新时间:2023-12-05 05:26:29 24 4
gpt4 key购买 nike

我正在尝试在使用 REST 端点的 Camel Route 中构建拆分/聚合模式。它需要一个包含请求详细信息列表的请求对象。我想并行处理请求详细信息,然后将聚合结果返回给调用者。我希望这是一个同步调用。

这是我的 route 的代码。

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 调用正在触发多个线程,这很棒。我可以看到“聚合后 --->”上方的日志语句以及我想要的响应,它有自己的线程。但是这个输出会发生什么?我怎样才能将它恢复到我的默认 Exchange 中,以便它可以返回到 REST 调用。

最佳答案

来自 Apache Camel: Splitter :

What the Splitter returns

Camel 2.3 and newer:

The Splitter will by default return the original input message.

For all versions

You can override this by suppling your own strategy as an AggregationStrategy.

如果你想聚合拆分的结果,你只需要像这样:

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)));

关于apache-camel - Apache Camel Split 和 Aggregate Looses 聚合交换的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25550306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com