首页 > 解决方案 > Apache骆驼从body()中获取价值

问题描述

这是我的骆驼主课,也是我的骆驼路线

public class MyCamelRoute {

    public static void main(String... args) {
        CamelContext context = new DefaultCamelContext();
        try {
            context.addRoutes(new CSVRoute());
            context.start();
            Thread.sleep(20000);
            context.stop();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class CSVRoute extends RouteBuilder {

    public void configure() throws Exception {
        CsvDataFormat csv = new CsvDataFormat();
        from("file:my_csv.csv&noop=true")
        .split(body().tokenize("\n")).streaming()
        .unmarshal(csv)
        .log(LoggingLevel.INFO, body().toString());
    }
}

运行它时,我得到了我所期望的

13:30:42.730 [骆驼 (camel-1) 线程 #1 - file://my_csv.csv] 信息 route1 - 简单{[[534488]]}

13:30:42.732 [Camel (camel-1) 线程 #1 - file://my_csv.csv] INFO route1 - simple{[[969034]]}

13:30:42.734 [骆驼 (camel-1) 线程 #1 - file://my_csv.csv] 信息 route1 - 简单{[[510711]]}

13:30:42.736 [骆驼 (camel-1) 线程 #1 - file://my_csv.csv] 信息 route1 - 简单{[[778410]]}

13:30:42.737 [骆驼 (camel-1) 线程 #1 - file://my_csv.csv] INFO route1 - 简单{[[803306]]}

13:30:42.739 [骆驼 (camel-1) 线程 #1 - file://my_csv.csv] 信息 route1 - 简单{[[567892]]}

13:30:42.741 [骆驼 (camel-1) 线程 #1 - file://my_csv.csv] 信息 route1 - 简单{[[269041]]}

13:30:42.743 [骆驼 (camel-1) 线程 #1 - file://my_csv.csv] 信息 route1 - 简单{[[622768]]}

13:30:42.745 [骆驼 (camel-1) 线程 #1 - file://my_csv.csv] 信息 route1 - 简单{[[701100]]}

13:30:42.746 [Camel (camel-1) 线程 #1 - file://my_csv.csv] INFO route1 - simple{[[169439]]}

13:30:42.747 [骆驼 (camel-1) 线程 #1 - file://my_csv.csv] 信息 route1 - 简单{[[435246]]}

我的问题是,我想访问 simple{[[ value ]]} 内部的值,但我不完全确定如何。

我之前所做的只是将它发送到一个进程并exchange.getBody().getIn()从那里使用并检查/转换它,但我想尽量避免使用一个进程。

非常感谢任何和所有帮助

标签: javamultithreadingcsvapache-camel

解决方案


要记录消息正文,您必须使用

.log(LoggingLevel.INFO, "${body}");

由于 INFO 是默认设置,因此执行起来更快

.log("${body}");

你也可以写一段文字

.log("The message contains: ${body}");

推荐阅读