2012-04-23 1 views
1

У меня есть папка на моем сервере Mule ESB, на которую могут указывать несколько источников (один SCP, один SFTP, а также другие). Всякий раз, когда я обнаруживаю файл, я хочу переместить его в другой каталог. Проблема в том, что я перемещаю частично заполненные файлы, заставляя меня потерять данные.Mule ESB: Как я могу обнаружить частичные файлы, чтобы избежать передачи частично загруженных файлов?

Я попытался использовать атрибут «fileage» файла, но он не работает надежно. Я стараюсь поддерживать латентность как можно больше, так как большинство файлов будут < 10kb, но некоторые из них должны быть размером до 100 МБ.

Есть ли способ узнать, является ли файл частичным, а не полным? Я знаю, что WinSCP использует расширение .filepart, но это только для одного приложения, и даже тогда это расширение может быть изменено (или полностью удалено) в настройках WinSCP.

+0

Какую проблему надежности вы получили с fileAge? Возможно, стоит открыть JIRA @ MuleSoft, если это ошибка? Это говорит о том, что наилучшим вариантом для поддержания низкой задержки и высокой надежности будет обеспечение использования управляющего файла (например .filepart) и создание определенного фильтра, который его ищет. –

+2

На самом деле, с чуть большим тестированием выясняется, что проблема находится на уровне ОС. В RedHat метка «Last Modified» обновляется только каждые ~ 1000 мс, создавая слишком большую задержку для файлов 4kb. В Windows это еще хуже: «последний измененный» устанавливается только после начала передачи, а затем сбрасывается, когда он завершается. Команда MuleSoft технически корректна, чтобы вытащить fileAge с этой отметки времени, но ОС не обновляет ее достаточно часто, чтобы работать. Вместо этого они должны использовать файл ** size **. Я отправлю билет на работу. – Bing

+0

Это замечательные результаты. –

ответ

2

Я решил свою проблему.

С еще большим количеством тестирования выясняется, что проблема находится на уровне ОС. В RedHat метка «Last Modified» обновляется только каждые ~ 1000 мс, создавая слишком большую задержку для файлов 4kb. В Windows это еще хуже: «последний измененный» устанавливается только после начала передачи, а затем сбрасывается, когда он завершается. Команда MuleSoft технически корректна, чтобы вытащить fileAge с этой отметки времени, но ОС не обновляет ее достаточно часто, чтобы работать. Они должны использовать файл вместо. Я отправлю билет на работу.

+0

Я нашел ту же проблему. Не могли бы вы опубликовать свое обходное решение? –

+0

Привет, Фернандо, извините за поздний ответ, только что увидел ваш комментарий. Я использую настраиваемый трансформатор, который проверяет файл SIZE вместо последнего измененного времени. (Проверьте размер -> sleep X millisec -> проверьте размер снова: если тот же размер, предположите, завершен.) Удачи! – Bing