我只是想分割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
答案 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>
如果您需要更多信息,请大声说。