Как завершить все ожидающие сообщения в агрегаторе, когда получен заголовок - PullRequest
0 голосов
/ 16 ноября 2018

Я хотел бы создать что-то вроде «левого внешнего соединения» на основе верблюжьих маршрутов. В моем проекте у меня есть два маршрута, которые потребляют данные из двух таблиц базы данных и отправляют их строка за строкой на следующий шаг (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 голосов
/ 16 ноября 2018

Просто добавьте completionPredicate, чтобы сообщить Camel, в какой ситуации агрегат должен считаться завершенным (в вашем случае это когда ваш специальный заголовок / свойство установлено в значение true). Вы можете использовать Camel Simple language для выражения предиката. Пример:

<aggregate strategyRef="myStrategy" eagerCheckCompletion="true">
        ...
        <completionPredicate>
          <simple>${body} contains 'STOP'</simple>
        </completionPredicate>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...