Как снова прочитать пропущенный файл в маршруте Apache Camel?

#java #file #apache-camel

Вопрос:

Я использую file компонент apache camel для чтения всех файлов из каталога. Основываясь на размере файла (если размер файла в списке не похож на то, что я сейчас читаю), я хочу пропустить файл и забрать его снова на следующей итерации. Возможно ли это? Мой обрезанный код выглядит следующим образом:

 from("file://my/directroy/path/?recursive=trueamp;noop=trueamp;idempotent=false")
.aggregate(constant(true), new AggregationStrategy())
.completionSize(100).completionTimeout(100)
.split(body()).process(new Processor() {
  public void process(Exchange exchange){
     //Move this file only if the size is == new File("thisPath").length();
    // othersize skip this for now and pick it up in next iteration
  }
});
 

Комментарии:

1. Я столкнулся с этой проблемой из стратегии усиления. Он дважды добавлялся в список, поэтому файл загружался дважды. Решил эту проблему, удалив AggregationStrategy.

Ответ №1:

https://camel.apache.org/components/3.4.x/file-component.html

Согласно документации, вы можете использовать :

 filterFile (filter)
    

Filters the file based on Simple language. For example to filter on file size, you can use ${file:size} 5000
 

Это выглядело бы примерно так:

     from(file:{{replayDir}}/?filterFile=${file:size} 5000
 

Для простой языковой поддержки, пожалуйста, смотрите https://cwiki.apache.org/confluence/display/CAMEL/Simple

введите описание изображения здесь