NonePoll Enrich внутри цикла DoWhile удаляет только последний файл обмена

  • Верблюд удаляет только последний файл обмена, а не другие файлы из исходного каталога, когда в цикле loopDoWhile используется pollenrich

  • У меня 2 роутера, процесс и бэкап.

  • После успешного выполнения роутера процесса я хочу переместить все файлы из dir1 в dir2 на s3. Поэтому я вызываю резервный маршрутизатор, устанавливая заголовок "backupFiles" в "true"
  • В резервном маршрутизаторе я использую loopDoWhile и разрываю цикл, если backupFiles не равен 'true'

технологический маршрутизатор

from("some starting point")
                .routeId("process")
                 // after successful operation, move all the files 
                 // from directory1 to directory2 on aws s3
                .setHeader("backupFiles", simple("true"))
                .to("direct:backup");

резервный маршрутизатор

from("direct:backup")
            .routeId("backup")                              
            .loopDoWhile(header("backupFiles").isEqualTo("true"))
            .pollEnrich()               
            .simple("aws://bucketprefix=
some_input_dir&deleteAfterRead=true")
            .timeout(5000)
            .choice()
            .when(new FileBackupPredicate())
                .setHeader("originalKey", header(S3Constants.KEY))
                .setHeader("s3FileName", method(MoveFiles.class, "getS3FileName"))                                          
                .setHeader(S3Constants.KEY, simple("backup/" + "${in.header.s3FileName}"))
                .to(s3Bucket)
                .setHeader(S3Constants.KEY, "${in.header.originalKey}")  
            .end()                              
  .end(); 

Класс FileBackupPredicate

@Override
public boolean matches(Exchange exchange) {
   boolean isEnd = (boolean)       
exchange.getProperty(Exchange.BATCH_COMPLETE);

     if (!isEnd) {                                     
           exchange.getIn().setHeader("backupFiles", "true");
     } else {                                     
          exchange.getIn().setHeader("backupFiles", "false");
     }
       return true;
}

Все работает нормально, копирует все файлы из dir1 в dir2, с этим проблем нет.

  • Но проблема в том, что он удаляет только последний файл обмена, а не другие файлы из dir1
  • Например, если в резервном маршрутизаторе dir1 есть 3 файла 1.txt, 2.txt и 3.txt, он копирует все файлы из dir1 в dir2, но удаляет только 3.txt из dir1 (не удаляет 1.txt и 2.txt от dir1) Так что я думаю, что верблюд совершает только последний обмен, поэтому он выполняет deleteAfterRead=true для него, но не для других обменов.

Могу ли я знать, что я делаю здесь неправильно или как добиться желаемых результатов?

0 ответов

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