Как проверить, существует ли файл во время прослушивания в Apache Camel - PullRequest
1 голос
/ 24 января 2020

У меня есть проект, написанный на Apache Camel, в котором я получаю сообщения с одного маршрута и отправляю его на другой маршрут для прослушивания:

from("URI").bean(random1)
.wireTap("direct:wiretap")
.recipientList.method(random2, "random2Method");

from("direct:wiretap").routeId("WireTap")
.setProperty("filename", dynamicValueExpression)
.to("file://log-directory-name?fileName=/${date:now:yyyMMdd}/property[filename]")

Этот код работает абсолютно нормально и успешно прослушивает файлы.

Проблема в том, что этот код перезаписывает файл, если существует другой файл с таким же именем файла . Чего я хочу добиться - это проверить, существует ли файл и переименовывает ли он текущий (а не существующий) текущий файл, а затем прослушать его.

Я проверил документацию Camel и обнаружил, что что-то вроде fileExist = свойство Move и пользовательская файловая стратегия, которую, я думаю, я мог бы использовать (я могу ошибаться здесь). Но я не уверен, как именно это будет работать.

Итак, мой вопрос:

  1. Действительно ли возможно достичь того, чего я пытаюсь достичь?
  2. Если да, то может кто-нибудь, пожалуйста, дайте мне знать, как?

1 Ответ

1 голос
/ 24 января 2020

Вероятно, есть несколько способов сделать это. Один из них использует процессор, который вычисляет имя файла, используя ваше свойство dynamici c:

from("direct:wiretap")
    .routeId("WireTap")
    .process(e -> {
        String fileName = (String) e.getProperty("filename");
        if (new File(fileName).exists()) {
            //Compute alternative name
            e.getIn().setHeader("CamelFileName", 
                                fileName + UUID.randomUUID().toString());
        } else {
            e.getIn().setHeader("CamelFileName", fileName);
        }
    })
    .to("file://log-directory-name");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...