如何调用读取文件的骆驼路线?
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}")
;
我有骆驼路线来读取文件如下:
@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
可以帮助您创建和清理测试目录。您可以查看
我实际上是想从另一个路由调用这个路由或者在一个路由中级联它。我发现这个有效:
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}")
;