我想基于骆驼路线创建诸如“左外部联接”之类的东西。在我的项目中,我有两条路线,它们使用2个数据库表中的数据并将其逐行发送到下一步(joinData)。两个表都具有相同的主键,我希望基于此主键从这两个表中联接数据。我的情况是:
<route id="select1">
//some code
<to uri="direct:joinData"/>
</route>
<route id="select2">
//some code
<to uri="direct:joinData"/>
</route>
<route id="joinData">
<from uri="direct:joinData"/>
<aggregate strategyRef="joinStrategy" completionSize="2">
<correlationExpression>
<jsonpath>$.ID</jsonpath>
<to uri="direct:result/>
</aggregate>
</route>
来自两个来源的最新消息都包含特殊的标头/属性,该标头/属性在上次选择记录时设置为true。是否有可能,当此特殊标头出现,或者更好的是,两个标头都出现时,如何完成未在聚合器中等待的其余待处理消息?因为,现在仅将合并的消息发送到结果路由。从数据库加载结束时,我想整理所有待处理的消息。
感谢您的想法。
答案 0 :(得分:0)
只需添加一个completionPredicate
即可告诉Camel在哪种情况下必须将聚合视为完整(在您的情况下,这是将特殊的标头/属性设置为true时)。
您可以使用骆驼Simple language
来表达谓词。示例:
<aggregate strategyRef="myStrategy" eagerCheckCompletion="true">
...
<completionPredicate>
<simple>${body} contains 'STOP'</simple>
</completionPredicate>