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}");