【问题标题】: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,但是在调试时,执行根本无法到达聚合器。

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

【问题讨论】:

    标签: java apache-camel enterprise-integration


    【解决方案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}")
        ;
        

        【讨论】:

          猜你喜欢
          • 2018-09-05
          • 2015-06-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-24
          • 1970-01-01
          相关资源
          最近更新 更多