我在路由的最后一个中调用transformerBean
但是当我调试它时,在调用偶数聚合组件之前首先调用它。
from("direct:processRequest").multicast().parallelProcessing().
to("bean:abcService?method=getProductInfo",
"bean:xyzService?method=getProductInfo").
aggregationStrategy(aggregationStrategy).
to("bean:transformerBean?method=transform");
我想我在这里遗漏了一些东西。
我的要求是在transformerBean
之后致电aggregationStrategy
。
答案 0 :(得分:2)
聚合策略的位置有点具有欺骗性。可以这样想:指定用于多播的聚合策略;您没有指定聚合发生的地方。
语义是将aggregationStrategy()调用与多播相关联。可以把它想象成删除代码中指定aggregationStrategy()并将其移动到multicast()调用的行。然后,你剩下三(3)次调用bean:两个调用一个到(),另一个调用另一个调用() 因此,Camel将abcService,xyzService和transformerBean作为多播的一部分进行调用。然后,它调用聚合策略三次。
您可以使用对end()的调用来标记多播的结束。此外,为了使语义更加明确,您可以将聚合策略作为参数传递给multicast()调用。
以下是一个例子:
from("direct:start")
.log("after direct:start body=${body}")
.multicast(new MyAggregationStrategy()).parallelProcessing()
.to("direct:A")
.to("direct:B")
.end()
.to("direct:C");
from("direct:A").log("A: ${body}").transform(constant("Body changed by A "));
from("direct:B").log("B: ${body}").transform(constant("Body changed by B "));
from("direct:C").log("C: ${body}").transform(constant("C - Post-aggregation "));