2017-02-06 3 views
0

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

Я понял, как это сделать, используя RouteBuilder и CamelContext.start(), как в примерах, но мне не нужен фоновый демон в бесконечном цикле и мне не нужна сложная маршрутизация.

Как я могу сделать что-то вроде:

String body = new DefaultCamelContext().justRunOnce(
    from("ftp://ftp.example.com/data/foo.txt") 
    .validate(body().regex("My Data.*")) 
    .getBody()); 

Я прочитал некоторые ответы о том, как остановить маршрут с помощью «шина управления действие = остановить?» Или или аналогичные, но те еще «таймер повторить = 1?» запустите Camel как новый поток, а затем используйте некоторые хаки, чтобы остановить его. Я не ищу сложное решение, которое каким-то образом управляет им, а скорее хотел бы знать, способен ли Camel быть использован в скудной 10-лайнере, как в моем примере выше.

+0

Возможный дубликат [Как получить Camel FTP для получения только один раз по запросу] (http://stackoverflow.com/questions/31819073/how-to-get-camel-ftp-to-fetch-only-once-on-demand) –

+1

Наверняка, есть лучше чем использование структуры корпоративных шаблонов интеграции для загрузки одного файла и сделать очень простую обработку на нем. – Strelok

+0

Просто используйте ConsumerTemplate для загрузки файла один раз, и нет необходимости в каких-либо Маршрутах –

ответ

1

Вы можете использовать функцию pollEnricht см http://camel.apache.org/content-enricher.html:

Пример, вы можете также использовать ФТП конечную точку вместо файла конечной точки:

<route> 
<from uri="direct:start"/> 
    <pollEnrich> 
    <constant>file:inbox?fileName=data.txt</constant> 
    </pollEnrich> 
<to uri="direct:result"/> 

Смежные вопросы