Я пишу простое приложение командной строки, которое копирует файлы с ftp-сервера на локальный диск. Предположим, что я использую следующее определение маршрута:
File tmpFile = File.createTempFile("repo", "dat");
IdempotentRepository<String> repository = FileIdempotentRepository.fileIdempotentRepository(tmpFile);
from("{{ftp.server}}")
.idempotentConsumer(header("CamelFileName"), repository)
.to("file:target/download")
.log("Downloaded file ${file:name} complete.");
где ftp.server
- это что-то вроде:
ftp://ftp-server.com:21/mypath?username=foo&password=bar&delay=5
Предположим, что файлы на ftp-сервере со временем не изменятся. Как проверить, завершилось ли копирование или еще есть файл для копирования? Мне нужно это, потому что я хочу закончить свое приложение, как только весь файл будет скопирован.
Читайте о пакетном потребителе
Пользователь ftp установит некоторые свойства обмена с количеством файлов, и если его последний файл и т.д.
У вас есть какой-либо контроль над концом, который публикует файлы FTP? Например, это ваш сервер и ваш клиент или вы можете сделать запрос в качестве клиента?
Если это так, вы можете попросить добавить файл флага в конце их пакетного процесса. Это однобайтовый файл с согласованным именем, за которым вы смотрите - когда этот файл появляется, вы знаете, что пакет завершен.
Это полезный метод, если вы регулярно удаляете огромные файлы, и им требуется много времени, чтобы пакетный процесс копировал на диск на сервере. Например, файл создается некоторым потоковым процессом.