骆驼 - 同步路线

时间:2017-09-22 16:40:20

标签: apache-camel

我有两条路由在不同的服务器上每2秒执行一次命令,并将输出打印到同一个文件:

camelCtx.addRoutes(new RouteBuilder() {
    @Override
    public void configure() {
        from("ssh://username:password@host1:port?delay=2&pollCommand=whoami")
        .to("file:///tmp/?fileName=test.txt");
    }
});
camelCtx.addRoutes(new RouteBuilder() {
    @Override
    public void configure() {
        from("ssh://username:password@host2:port?delay=2&pollCommand=whoami")
        .to("file:///tmp/?fileName=test.txt");
    }
});

我想确保两条路由同时启动,并且在路由启动时还为每个命令的前缀输出添加时间戳。对于第二个问题,我尝试了自定义过程:

.process(exchange -> {
    String body = exchange.getIn().getBody(String.class);
    exchange.getIn().setBody(System.currentTimeMillis() + " " + body);
})

但它显然给出了收到输出的时间 我也可以在执行命令之前执行date +%s%N,这样pollCommand参数将如下所示:

...&pollCommand=date +%s%N;whoami"...

但是在这种情况下,它已经建立了与服务器的连接的时间,这有点太晚了......

那么如何获得路线的“开始时间”? 还有如何同步几条路线以便它们同时执行?

1 个答案:

答案 0 :(得分:1)

如果您指的是开始/创建路线上的交换(骆驼消息)的时间,那么您可以从交换属性访问该信息。

例如,您可以执行Camel Processor

Date created = exchange.getProperty(Exchange.CREATED_TIMESTAMP, Date.class);

您可以使用该信息构建一个文件名,您可以使用标题Exchange.FILE_NAME设置该文件名,然后覆盖端点uri中配置的文件名,这样您就可以包含时间戳。