在camel-route中,使用exec组件使用grep制作curl,但使用${HOSTNAME}的grep不起作用



在camel-route中,我使用exec组件用grep制作curl,但使用${HOSTNAME}的grep不起作用,下面是我的camel-rroute。请在这方面寻求帮助。

@Component
public class VideoFilesOperationRoute extends RouteBuilder {
@Value("${scheduler.cronExpression}")
private String cron;
@Override
public void configure() throws Exception {
from("quartz2://videoFilesOperations/everydayMidnight?cron=" + cron)
.to("exec:curl?args= --silent http://localhost:4040/ | grep ${HOSTNAME}&useStderrOnEmptyStdout=true")
.to("bean:videoFilesOperationImpl?method=videoFilesOperation");
}
}

尝试了以下解决方案,但仍然存在相同的问题:

//Tried this first
List<String> args = new ArrayList<>();
args.add("-c");
args.add("curl --silent http://localhost:4040/ | grep ${HOSTNAME}");
from("quartz2://videoFilesOperations/everydayMidnight?cron=" + cron)
.setHeader(ExecBinding.EXEC_COMMAND_ARGS, constant(args))
.to("exec:/bin/sh")
.to("bean:videoFilesOperationImpl?method=videoFilesOperation");

//Tried this next
from("quartz2://videoFilesOperations/everydayMidnight?cron=" + cron)
.to("exec:scripts/curl.sh")
.to("bean:videoFilesOperationImpl?method=videoFilesOperation");

问题是camel-exec命令参数是用空格分隔的。因此,您尝试将输出从curl管道传输到grep是行不通的。

试试这样的东西:

@Override
public void configure() throws Exception {
List<String> args = new ArrayList<>();
args.add("-c");
args.add("curl --silent http://localhost:4040/ | grep ${HOSTNAME}");
from("quartz2://videoFilesOperations/everydayMidnight?cron=" + cron)
.setHeader(ExecBinding.EXEC_COMMAND_ARGS, constant(args))
.to("exec:/bin/sh");
}

或者你可以把卷发包起来;shell脚本中的grep命令,并让camel-exec调用该命令。