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

Posted

技术标签:

【中文标题】如何调用读取文件的骆驼路线?【英文标题】:How to call Camel route that reads file? 【发布时间】:2018-12-08 23:59:10 【问题描述】:

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

@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 上找不到任何关于此的信息

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案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);
            );

感谢大家对此进行调查!!干杯!

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于如何调用读取文件的骆驼路线?的主要内容,如果未能解决你的问题,请参考以下文章

spring boot + mongodb + 骆驼路由连接问题

是否可以使用 java 接口或 bean 启动骆驼路线?

opc-ua milo项目的骆驼路线

如何在骆驼中将文件拆分为行但以不同方式处理第一行

如何在骆驼XML路径中删除一部分文件名

骆驼如何将授权标头添加到休息路线?