【发布时间】:2014-06-27 18:27:02
【问题描述】:
我有一个简单的路径来获取以 .fin 结尾的文件,这些文件的正文是我必须发送到 ftp 服务器的文件名。这是路线:
<route id="sendToFtp">
<from uri="file:{{tmp.files.location}}/export/pr?delete=true&include=.*.txt.fin"/>
<process ref="getFileProcess" />
<log message="Sending message ${file:name}"/>
<setHeader headerName="CamelFileName">
<simple>${file:name.noext}</simple>
</setHeader>
<delay>
<constant>10000</constant>
</delay>
<to uri="{{export.feed.ftp}}{{export.feed.ftp.folder}}?username={{export.feed.ftp.username}}&password={{export.feed.ftp.password}}&passiveMode=true&connectTimeout={{feed.interval}}&timeout={{feed.interval}}&soTimeout={{feed.interval}}&disconnect=true" />
</route>
我在文件中使用轮询消费者来检索本地文件以发送到 ftp。流程如下:
@Override
public void process(Exchange exchange) throws Exception {
final String filename = exchange.getIn().getBody(String.class);
Endpoint endpoint = exchange.getContext().getEndpoint("file:{{powerreviews.tmp.files.location}}/export/pr?delete=true&fileName="+filename);
PollingConsumer consumer = endpoint.createPollingConsumer();
consumer.start();
Exchange ex = consumer.receive(60000);
if (ex==null){
exchange.getIn().setBody("");
}else {
exchange.getIn().setBody(ex.getIn().getBody());
}
consumer.stop();
}
当我执行路由时,似乎在路由结束后交换没有关闭,导致我的文件 .fin 和我使用 pollingConsume 使用的文件没有被删除,当我在端点中明确有 delete=true 时范围。无论如何,文件已正确发送到 ftp。
在日志中我有以下内容:
2014-06-27 20:23:03,765 | WARN | roduct/export/pr | kerFileExclusiveReadLockStrategy | 100 - org.apache.camel.camel-core - 2.10.7 | Deleting orphaned lock file: tmp/product/export/pr/the.txt.fin.camelLock
2014-06-27 20:28:08,041 | WARN | roduct/export/pr | kerFileExclusiveReadLockStrategy | 100 - org.apache.camel.camel-core - 2.10.7 | Deleting orphaned lock file: tmp/product/export/pr/the.txt.camelLock
【问题讨论】:
-
阅读ConsumerTemplate的javadoc文档你会发现!
标签: apache-camel apache-servicemix