在驼峰路由使用exec组件使用grep进行curl但使用$ {HOSTNAME}无效的grep

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在驼峰路由使用exec组件使用grep进行curl但使用$ {HOSTNAME}无效的grep相关的知识,希望对你有一定的参考价值。

在驼峰路线中,我使用exec组件使用grep进行curl但使用$ {HOSTNAME}无效的grep,下面是我的驼峰路径。请在此方面需要帮助。

@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");
}

或者你可以将curl&grep命令包装在shell脚本中并让camel-exec调用它。

以上是关于在驼峰路由使用exec组件使用grep进行curl但使用$ {HOSTNAME}无效的grep的主要内容,如果未能解决你的问题,请参考以下文章

Twitter Oauth 1.0请求与驼峰路线

如何使用 curl 与 exec nodejs

PHP Curl PUT 在 curl_exec 处停止

php如何执行linux的curl指令

php 用curl_exec 采集页面内容,结果 302重定向

curl_exec 使用谷歌云消息返回 null