2016-06-22 2 views
0

Мой случай использования - периодически опросить локальный каталог для списка новых файлов, а затем загрузить их на FTP-сервер в 1 соединении. Маршрут Camel определяется в Spring XML следующим образом:Apache Camel Batch FTP Upload then disconnect

<route> 
    <from uri="file:data/inbox?noop=true&amp;delay=1000&amp;maxMessagesPerPoll=3" /> 
    <to uri="ftp:uid:[email protected]:21/data?disconnect=false"/> 
</route> 

маршрут функционирует хорошо, за исключением того, что соединение FTP сохранит связным до сервера FTP таймаут моего соединения. Я надеюсь повторно использовать одно и то же соединение для загрузки партии файлов, а затем немедленно закрыть соединение, когда последний файл в пакете завершил загрузку. Как это можно достичь в Camel?

ответ

2

В настоящее время это невозможно. Вам нужно будет написать код для самостоятельного отключения.

Добро пожаловать, чтобы зарегистрироваться JIRA, чтобы улучшить это на верблюдах-ftp: https://issues.apache.org/activemq/browse/CAMEL. Например, новый параметр disconnectOnBatchComplete.

+0

Спасибо за ваш ответ. Я создал случай JIRA https://issues.apache.org/jira/browse/CAMEL-10083 – xlogger

0

Возможно, есть способ, но это не очень.

Вы можете попробовать обернуть свой маршрут на основе cronSchedulePolicy. Поэтому скажите, что вы начинаете маршрут каждый час, и опросите каталог и отправьте файлы. Затем вы просто добавляете stop(). Не уверен, что остановка точно такая же в xml dsl. В качестве альтернативы вы также можете написать это onExchangeComplete(new Processor(StopProcessor(routeId)), и внутри этого процессора вы через exchange.getContext.stopRoute(routeid) остановите маршрут. Опять же, это зависит от ваших требований, которые позволяют вам это делать.

<route> 
    <from uri="file:data/inbox?noop=true&amp;delay=1000&amp;maxMessagesPerPoll=3" /> 
    <to uri="ftp:uid:[email protected]:21/data?disconnect=false"/> 
<stop/> 
</route>