我尝试使用 Camel ConsumerTemplate 多次下载同一个文件。它没有被多次下载,但我在使用驼峰路线时完成了它。
我想多次使用ConsumerTemplate 下载文件。
这是我在ConsumerTemplate上尝试的代码:
import org.apache.camel.CamelContext;
import org.apache.camel.ConsumerTemplate;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
public class DynamicConsumer implements Processor {
@Override
public void process(Exchange inExchange) throws Exception {
CamelContext camelContext = inExchange.getContext();
ConsumerTemplate consumerTemplate = camelContext.createConsumerTemplate();
String resource = "sftp://tester@localhost:22/myfiles?password=password&noop=true&idempotent=false&readLockMarkerFile=false&readLock=none&filter=#myFileFilter";
consumerTemplate.start();
Exchange resourceExchange = consumerTemplate.receive(resource,20000);
consumerTemplate.stop();
if(resourceExchange != null) {
inExchange.getOut().setBody(resourceExchange.getIn().getBody());
inExchange.getProperties().putAll(resourceExchange.getProperties());
inExchange.getOut().getHeaders().putAll(resourceExchange.getIn().getHeaders());
} else {
inExchange.getOut().setBody(null);
}
}
}
这种动态消费者被多次从骆驼路线调用。所以,每次,我都希望下载给定位置的文件。但它没有发生。
这是我尝试使用驼峰路线的代码。
<from uri="sftp://tester@localhost:22/myfiles?password=password&noop=true&idempotent=false&readLockMarkerFile=false&readLock=none&filter=#myFileFilter"/>
答案 0 :(得分:3)
正如文档所述,您应该调用ConsumerTemplate的 - doneUoW(Exchange)
函数:
如果您使用了任何返回Exchange的接收方法 然后你需要在完成使用后调用此方法 返回交流。
尝试在consumerTemplate.stop()
之前添加以下内容:
consumerTemplate.doneUoW(resourceExchange);