Как вызвать верблюжий маршрут, который читает файл?

У меня есть верблюжий маршрут, чтобы прочитать файл, как показано ниже:

@Component
public class MessageRoute extends RouteBuilder {

    public static final String ROUTE_ID = "message.route";
    public static final String ROUTE_URI = "{{message.route.uri}}";

    @Override
    public void configure() throws Exception {

        from("file:://target/test.txt")
                .convertBodyTo(String.class)
                .process(exchange -> {
                    log.info("Body {}", exchange.getIn().getBody(String.class));
                });
    }
}

Теперь вопрос, как сделать звонок по этому маршруту? Моя конечная цель состоит в том, чтобы позвонить по телефону и узнать, как обработать содержимое файла.

Я не мог найти ничего об этом на Camel Docs

Также я пытался использовать pollEnrich как упомянуто в этом ответе, но во время отладки выполнение вообще не попадает в агрегатор.

Я был бы благодарен за миллион долларов за любое решение, предложение или идею.

2 ответа

Решение

Я на самом деле пытался вызвать этот маршрут из другого маршрута или каскадировать его внутри маршрута. Я нашел это работает:

public static final String FILE_ROUTE_ID = "file.route";
public static final String FILE_ROUTE_URI = "{{file.route.uri}}";

@Override
public void configure() throws Exception {

    from(FILE_ROUTE_URI)
            .routeId(FILE_ROUTE_ID)
            .log(LoggingLevel.INFO, "Header {}", String.valueOf(simple("${header.purpose}")))
            .from("file:apache-camel-spring-boot?fileName=printing.key&noop=true")
            .convertBodyTo(String.class)
            .process(exchange -> {
                log.info("Processing file . . .");
                KeyBody keyBody = new KeyBody(exchange.getIn().getBody(String.class));
                exchange.getIn().setBody(keyBody);
            });
}

Спасибо всем за внимание! Ура!

Пришлось сделать нечто подобное. Это следующие работы в camel 2.18+ -

rest("/load")
.get("/sampleFile")
.to("direct:readFromSampleFile")
    ;
from("direct:readFromSampleFile")
.pollEnrich("file://c:/folder?fileName=sample.txt&noop=true&idempotent=false") // idempotent to allow re-read, no-op to keep the file untouched
.convertBodyTo(String.class)
.log("Read ${body}")
.unmarshal().json(JsonLibrary.Jackson)
.setHeader("Content-Type").constant("application/json")
.log("Returned ${body}")
;

Что именно вы хотите проверить? Файловый компонент уже протестирован Camel. Для тестирования процессоров и компонентов, участвующих в вашем маршруте, вам, по сути, не нужен файловый компонент, поэтому необходимо заменить from расстаться с т.е. direct:start Посоветуйте свой маршрут, вероятно, рекомендуемый путь.

Если вы настаиваете на тестировании файлового компонента, который работает с файлами или каталогами, вы должны записать тестовые файлы в тестовый каталог в вашем тесте, а затем начать свой маршрут и посмотреть, правильно ли используются и обрабатываются файлы. JUnit обеспечивает TemporaryFolder это может помочь вам при создании и очистке тестовых каталогов. Вы можете увидеть мой ответ на аналогичный вопрос, чтобы увидеть, как это можно сделать с помощью Camel.

Другие вопросы по тегам