我有一种情况需要将数据传递到Aggregator,但我不希望聚合器在收到来自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时,聚合的Exchange将路由到我的lastBean
。但是,如果我将completionSize
设置为3,由于某种原因,lastBean#process
永远不会被调用。
我肯定我在这里错误地使用了header.id
和聚合器。在correlationExpression
中,我只需要确保我们从3条路线中分别收到1条消息。
所以我的问题:我需要做什么才能使我的聚合器“等待”,直到它收到来自route-1
的1条消息,来自route-2
的1条消息和来自{{的1条消息1}}吗
答案 0 :(得分:2)
如果要关联来自三条路线的消息,则需要有一种方法让它们在到达聚合路径时具有匹配的header.id值。
在您的示例中,每个路由设置不同的id值,因此不会匹配。如果你在每条路线中将id值设置为“1”,我认为它会按预期开始工作。