Camel Split聚合器将交换合并为List

时间:2015-04-01 06:25:15

标签: split apache-camel aggregate

我只是想分割Map实例列表,在bean中处理它们并将它们合并到列表对象中。所以我做了这个:

<camel:route>
            <camel:from uri="ref:contactHistoryDbRead"/>
            <camel:split parallelProcessing="true" streaming="true" strategyRef="groupedExchangeAggregationStrategy">
                <camel:simple>${in.body}</camel:simple>
                <camel:bean ref="contactHistoryRequestTransformer" method="transform"/>
            </camel:split>
            <camel:bean ref="contactHistoryService" method="createContactHistory"/>
            <camel:to uri="ref:contactHistoryDbUpdate"/>
        </camel:route>

最后,它会分割List<Map>对象,处理它们但是在分割结束后,当我想将整个项目作为List时,它只给我一个。

是因为org.apache.camel.processor.aggregate.GroupedExchangeAggregationStrategy吗?我该怎么做?

我的骆驼版本是:2.11.2

THX

1 个答案:

答案 0 :(得分:0)

对延迟回答道歉。根据{{​​3}}:

骆驼2.2或更早版本

Splitter默认返回最后一条拆分的消息。

Camel 2.3及更新

Splitter默认返回原始输入消息。

这是没有聚合策略的拆分器的默认行为。因此,在您完成拆分后的情况下,您将收到原始邮件,在您的情况下是您最初发送的地图。但是,您提供的聚合策略将覆盖默认策略。

如果您运行的是2.2及更早版本,则需要实施聚合策略。所以试试这条路线:

<camel:route>
        <camel:from uri="ref:contactHistoryDbRead"/>
        <camel:split parallelProcessing="true" streaming="true">
            <camel:simple>${in.body}</camel:simple>
            <camel:bean ref="doSomeprocessingOnTheMapBean" method="transform"/>
        </camel:split>
        <camel:bean ref="convertMapToListBean" method="TransformMapToList"/>
        <camel:to uri="ref:aBeanThatConsumesTheList"/>
</camel:route>

如果您需要更多信息,请大声说。

相关问题