有一种情况是,我希望将数据传递到集料器中,但我不希望聚合器在收到来自3条不同路由的消息之前做任何事情:
<route id="route-1">
<from uri="direct:fizz" />
<to uri="bean:bean1?method=process" />
<setHeader headerName="id">
<constant>1</constant>
</setHeader>
<to uri="direct:aggregator" />
</route>
<route id="route-2">
<from uri="direct:buzz" />
<to uri="bean:bean2?method=process" />
<setHeader headerName="id">
<constant>2</constant>
</setHeader>
<to uri="direct:aggregator" />
</route>
<route id="route-3">
<from uri="direct:foo" />
<to uri="bean:bean3?method=process" />
<setHeader headerName="id">
<constant>3</constant>
</setHeader>
<to uri="direct:aggregator" />
</route>
<route id="aggregator-route">
<from uri="direct:aggregator" />
<aggregate strategyRef="myAggregationStrategy" completionSize="1">
<correlationExpression>
<simple>header.id</simple>
</correlationExpression>
<to uri="bean:lastBean?method=process" />
</aggregate>
</route>按照这种配置方式,当聚合器的completionSize设置为1或2时,聚合lastBean将被路由到my lastBean。但是,如果我将completionSize设置为3,由于某种原因,lastBean#process将不会被调用。
我确信在这里使用header.id和聚合器是错误的。在correlationExpression中,我只需要确保3条路由中的每条都有1条消息。
因此,我的问题是:我需要做什么才能让我的聚合器“等待”,直到它从route-1**,收到1条消息,从** route-2 收到1条消息,从 route-3**?**收到1条消息
发布于 2013-12-17 20:40:26
如果您要关联来自三条路由的消息,则需要有一种方法,使它们在到达聚合路由时都有一个匹配的header.id值。
在您的示例中,每个路由设置不同的id值,因此没有匹配。如果您在每个路由中将id值设置为"1“,我认为它将像预期的那样开始工作。
https://stackoverflow.com/questions/20643795
复制相似问题