我有两条路由在不同的服务器上每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"...
但是在这种情况下,它已经建立了与服务器的连接的时间,这有点太晚了......
那么如何获得路线的“开始时间”? 还有如何同步几条路线以便它们同时执行?
答案 0 :(得分:1)
如果您指的是开始/创建路线上的交换(骆驼消息)的时间,那么您可以从交换属性访问该信息。
例如,您可以执行Camel Processor
:
Date created = exchange.getProperty(Exchange.CREATED_TIMESTAMP, Date.class);
您可以使用该信息构建一个文件名,您可以使用标题Exchange.FILE_NAME
设置该文件名,然后覆盖端点uri中配置的文件名,这样您就可以包含时间戳。