我有以下骆驼路线。
from("{{trade-publisher.trade-tnc.source-endpoint}}")
.doTry()
.bean(clientApi, "search(${body},${header.region})") //Returns List<Trade>
.split(simple("${body}"))
.parallelProcessing()
.doTry()
.bean(clientApi,"enrich(${body})") //Passing Trade Object
.endDoTry()
.doCatch(Exception.class)
.log(LoggingLevel.ERROR, "ENRICHMENT-EXCEPTION : ${exception.stacktrace}")
.end() //End of Inner try catch
.end()// End of split() and parallelProcessing()
.aggregate(aggegrationStrategy)
.exchange()
.completionTimeout(30000L)
...
...
但是在下面的汇总中,我在newExchange
中得到了List?它不应该传递Trade
对象而不是List<Trade>
吗?
@Override
public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
答案 0 :(得分:2)
否,设计是您在拆分器之后获得列表。请参见Splitter EIP documentation,然后查找段落What the Splitter returns
。
从Camel 2.3开始,它返回原始消息,该消息是Splitter的输入。如果要对各个零件进行处理,则必须在拆分器内进行处理。
好吧,您已经在
中做到了.bean(clientApi,"enrich(${body})")
当您“关闭”分离器时,您可以继续使用分离器之前的原始有效负载。这可能非常方便,但是如果您不需要它,路线通常会在拆分器之后结束。
答案 1 :(得分:0)
假设您希望在拆分器产生的每个交换中调用聚合器,那么您在路由的错误点进行了聚合。
var age = SpreadsheetApp.getUi().prompt("Please enter the age.").getResponseText();