Apache верблюд файл с doneFileName

Я только начинаю смотреть на Apache Camel (используя схемы маршрутов), и я уже застрял.

Мне нужно обработать набор файлов CSV с различными форматами. Я получаю 5 файлов с foo_X_20160110.csv, где X указывает тип CSV-файла, и файлы имеют отметку даты. Эти файлы могут быть довольно большими, поэтому "готовый" файл записывается после записи всех файлов. Готовый файл называется foo_trigger_20160110.csv.

Я видел параметр doneFileName для файла, но он поддерживает только статическое имя (у меня есть дата в имени файла) или он ожидает готовый файл для каждого входного файла.

Файлы должны обрабатываться в фиксированном порядке, но не гарантируется, в каком порядке они записаны во входной каталог. Следовательно, мне нужно дождаться готового файла.

Есть идеи, как это можно сделать с верблюдом?

Любые предложения для хороших книг верблюда?

1 ответ

Вот пример из документации http://camel.apache.org/file2.html

from("file:C:/temp/input.txt?doneFileName=done");

Как вы можете видеть, doneFileName имеет статическое значение "done". Но вы можете использовать стандартную Java для написания динамических имен, т. Е. Для текущего формата даты или чего-либо еще, и просто использовать строковую операцию для создания URI. Надеюсь, это поможет.

Обновить:

Кстати, как упомянуто в документации, есть опция динамических заполнителей для doneFileName.

Однако более распространено иметь один готовый файл на целевой файл. Это означает, что существует соотношение 1:1. Для этого вы должны использовать динамические заполнители в параметре doneFileName. В настоящее время Camel поддерживает следующие два динамических токена: file:name и file:name.noext, которые должны быть заключены в ${ }. Потребитель поддерживает только статическую часть имени готового файла как префикс или суффикс (но не оба).

from("file:bar?doneFileName=${file:name}.done");

Вы также можете использовать префикс готового файла, например:

from("file:bar?doneFileName=ready-${file:name}");
Другие вопросы по тегам