如何调用读取文件的骆驼路线?

How to call Camel route that reads file?

我有骆驼路线来读取文件如下:

@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));
                });
    }
}

现在的问题是如何调用这条路由?我的最终目标是从 producerTemplate 调用并处理文件内容。

我在 Camel Docs

上找不到任何相关信息

此外,我尝试使用 中提到的 pollEnrich,但在调试时,执行根本无法到达聚合器。

如果有任何解决方案、建议或想法,我将感激不尽。

你到底想考什么?文件组件已经由 Camel 测试。为了测试路由中涉及的处理器和 bean,您基本上不需要文件组件,因此通过建议您的路由将 from 部分替换为 direct:start 可能是推荐的方法。

如果你坚持测试文件组件,它对文件或目录起作用,你应该将测试文件写入测试中的测试目录,然后启动你的路由,看看文件是否被正确消费和处理。 JUnit 提供了一个 TemporaryFolder 可以帮助您创建和清理测试目录。您可以查看 以了解如何使用 Camel 完成此操作。

我实际上是想从另一个路由调用这个路由或者在一个路由中级联它。我发现这个有效:

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);
            });
}

感谢大家的关注!!干杯!

我不得不做类似的事情。以下适用于骆驼 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}")
;