收到标头后,如何完成聚合器中所有待处理的邮件

时间:2018-11-16 16:03:24

标签: apache-camel

我想基于骆驼路线创建诸如“左外部联接”之类的东西。在我的项目中,我有两条路线,它们使用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。是否有可能,当此特殊标头出现,或者更好的是,两个标头都出现时,如何完成未在聚合器中等待的其余待处理消息?因为,现在仅将合并的消息发送到结果路由。从数据库加载结束时,我想整理所有待处理的消息。

感谢您的想法。

1 个答案:

答案 0 :(得分:0)

只需添加一个completionPredicate即可告诉Camel在哪种情况下必须将聚合视为完整(在您的情况下,这是将特殊的标头/属性设置为true时)。 您可以使用骆驼Simple language来表达谓词。示例:

<aggregate strategyRef="myStrategy" eagerCheckCompletion="true">
        ...
        <completionPredicate>
          <simple>${body} contains 'STOP'</simple>
        </completionPredicate>