首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >骆驼AggregationStrategy出其不意

骆驼AggregationStrategy出其不意
EN

Stack Overflow用户
提问于 2013-12-17 20:15:05
回答 1查看 71关注 0票数 0

有一种情况是,我希望将数据传递到集料器中,但我不希望聚合器在收到来自3条不同路由的消息之前做任何事情:

代码语言:javascript
复制
<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条消息

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-17 20:40:26

如果您要关联来自三条路由的消息,则需要有一种方法,使它们在到达聚合路由时都有一个匹配的header.id值。

在您的示例中,每个路由设置不同的id值,因此没有匹配。如果您在每个路由中将id值设置为"1“,我认为它将像预期的那样开始工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20643795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档