2017-02-08 3 views
0

У меня пара параллельных маршрутов на верблюде. Один читает данные sql. Один из них читает файл на диске, а затем сравнивается с предыдущими данными sql. Мне нужно запустить маршрут 1 и на основании, если что-либо импортировано, проложить маршрут 2.Camel from direct read file and process

fromF("quartz2://mio/%s?cron={{route_1_cron}}", order). 
     log("Running data import..."). 

     to("sql:{{sql_select}}"). 
      choice(). 
       when(body().isNull()). 
        stop(). 

       when(body().isNotNull()). 
       bean(Utility.class,"incomingSqlData"). 
       choice().when(header("status").isEqualTo(true). 
       to("direct:start").stop(); 

До сих пор я доволен. Теперь на втором маршруте, с чего я начинаю с (direct: start), а затем читаю файл из его каталога? Поскольку я не могу иметь (прямое) .from («file: ..)», так как это создало бы два из маршрутов. И использование из («direct: start»). To («file: ...») попытается записать в файл

Tl:. др:?. Как я должен начать маршрут с прямым и затем чтения виде файла

+0

Взгляните на контент обогатителя и/или pollEnrich: http://camel.apache.org/content-enricher.html – noMad17

ответ

1

чтобы расширить @ noMad17 комментарий, вы можете использовать содержание обогатителя Таким образом, ваш from("direct:start") маршрут может выглядеть примерно так:

from("direct:start") 
    .pollEnrich("file:...", new MyAggregationStrategy()) 
    .... 

Это подскажет маршрут к чтения файл.

Обратите внимание, что AggregationStrategy «используется для комбинирования исходного обмена и обмена ресурсами» и не является обязательным. Если это не предусмотрено, то орган обмена ресурсами (то есть обмен, полученный в результате чтения файла) перезапишет исходный обмен.