Условная маршрутизация на верблюде на основе определенных условий

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

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

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

Компонент Quartz2 Route

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");

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

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

Мы думаем о других вариантах:

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

Я ценю любые советы относительно вышеизложенного.

2
0
599
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

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

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

Другие вопросы по теме