Маршрутизация на основе условий на верблюде в зависимости от конкретных условий - PullRequest
0 голосов
/ 26 октября 2018

Я строю маршрут динамически на основе некоторых условий.Например, в зависимости от конфигурации, маршрут from может быть кварцевым2 или файловым компонентом.Все остальные части маршрута одинаковы.

Маршрут компонента файла

from(file://E:/Camel)
.setProperty("fileName", simple("${file:onlyname}"))
.process(camelprocessor)
.to(queue)
.log("Posted message to Queue");

Маршрут компонента Quartz2

from(quartz2://schedulername?cron=0+0/5+12-18+?+*+MON)
.pollEnrich(file://E:/Camel)
.setProperty("fileName", simple("${file:onlyname}"))
.process(camelprocessor)
.to(queue)
.log("Posted message to Queue");

Как вы видите на маршрутах выше, последние четыре строки одинаковы для обоих маршрутов.В настоящее время мы соединяем часть от (компонент таймера или кварца2) маршрута с общим компонентом с помощью прямого компонента.

Это правильный подход?Будут ли какие-либо проблемы с производительностью, если мы будем использовать прямой компонент?

Другие возможные варианты:

  1. Дублируйте общую часть маршрута в обоих маршрутах.
  2. Используйте маршрутизацию на основе содержимого, но не знаете, как использовать условие на самом компоненте from.

Я ценю любые советы, касающиеся вышеизложенного.

1 Ответ

0 голосов
/ 26 октября 2018

Вы можете добавить прямой компонент и звонить с общего маршрута, как вы говорите.Насколько мне известно, я предложу не использовать пыльцу.

Поскольку при использовании pollenrich вы не можете обрабатывать все файлы в экземпляре (т. Е.) Pollenrich может обрабатывать 10 экземпляров одновременно.Если вам нужно обработать более 10 файлов, вы не сможете.

Вместо использования кварца и файлового компонента в маршруте.Вы можете добавить оба в одну конечную точку, как это,

<from uri="file://pathto//yourfile?scheduler=quartz2&amp;antInclude=*.xml&amp;scheduler.cron={{schedularName.Scheduler}}"/>

Я надеюсь, что это может помочь вам.

...