我想使用看似简单的camel-exec组件创建一个骆驼路由来执行gzip命令。但是,我需要在不修改原始文件的情况下压缩输入文件,并且压缩后的文件应该移动到另一个输出目录。
我搜索了一下,发现它可以在linux中通过以下命令之一实现:
gzip -c test_input_file.dat > /home/prem/myappdir/output/test_output.gz
或
gzip < test_input_file.dat > /home/prem/myappdir/output/test_output.gz
或
cat test_input_file.dat | gzip /home/prem/myappdir/output/test_output.gz
或
gzip -c test_input_file.dat | cat > /home/prem/myappdir/output/test_output.gz
以上所有命令在linux终端上都可以正常工作。当我在骆驼路由中使用这些命令时,它们都不起作用。
我使用'gzip'作为命令,其余内容作为命令参数传递给骆驼路由的Exec组件。
我执行gzip任务的Camel路由是:
<!-- route to demonstrate camel-exec -->
<route id="camelExecDemo">
<from uri="timer://kickoff?repeatCount=1"/>
<to uri="exec:gzip?args=-c /home/prem/Documents/input/test_input_file.dat > /home/prem/myappdir/output/test_output.gz&useStderrOnEmptyStdout=true"/>
<log message="${body}"/>
</route>
谁来帮帮我!我被这个问题难住了。
注意:简单的gzip命令,只有一个输入文件作为参数在我的路由中工作得很好。但是,我需要像上面提到的那样做。
系统细节:
Linux: RHEL (or Linux Mint 17)
Camel Version: 2.11.0
我终于明白了。我认为创建一个shell脚本来执行这些命令是完成这项任务的唯一方法。后来,我发现它可以通过'sh'命令(shell)和-c选项来完成,它从命令字符串中获取输入,并像shell脚本一样执行它们。
以下linux命令将在不修改原始输入文件的情况下执行gzip,并将压缩后的输出文件移动到另一个输出目录:
sh -c "gzip -c test_input_file.dat > /home/prem/myappdir/output/test_output.gz"
我的骆驼路线更新如下:
<route id="camelExecDemo">
<from uri="timer://kickoff?repeatCount=1"/>
<to uri="exec:sh?args=-c "gzip -c /home/prem/Documents/input/test_input_file.dat > /home/prem/myappdir/output/test_output.gz" &useStderrOnEmptyStdout=true"/>
<log message="${body}"/>
</route>
类似地,可以在shell命令的帮助下顺序执行多个linux命令,然后可以在camel-exec组件中使用。
感谢我提取这个想法的博客文章:
http://zhanghaoblog.blogspot.in/2015/01/camel-exec-multiple-commdans-scripts.html