Как вызвать верблюжий маршрут, который читает файл?
У меня есть верблюжий маршрут, чтобы прочитать файл, как показано ниже:
@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.