我想创建一些类似于基于驼峰路由的“左外部连接”的东西。在我的项目中,我有两个路由,这两个路由使用来自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的特殊标头/属性。有没有可能,当这个特殊的头到来时,或者更好的是,两个头都来了,如何完成在聚合器中等待的rest挂起消息,这些消息没有连接?因为,现在只将加入的消息发送到结果路由。我想完成所有未决的消息,当从数据库加载结束。
谢谢你的点子。
发布于 2018-11-17 00:58:10
只需添加一个completionPredicate来告诉Camel在哪种情况下聚合必须被认为是完整的(在您的示例中,是当您的特殊头/属性设置为true时)。您可以使用Camel Simple language来表达谓词。示例:
<aggregate strategyRef="myStrategy" eagerCheckCompletion="true">
...
<completionPredicate>
<simple>${body} contains 'STOP'</simple>
</completionPredicate>https://stackoverflow.com/questions/53341466
复制相似问题