使用Camel ConsumerTemplate多次下载文件

时间:2017-08-09 12:02:55

标签: apache-camel jbossfuse

我尝试使用 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&amp;noop=true&amp;idempotent=false&amp;readLockMarkerFile=false&amp;readLock=none&amp;filter=#myFileFilter"/>

1 个答案:

答案 0 :(得分:3)

正如文档所述,您应该调用ConsumerTemplate的 - doneUoW(Exchange)函数:

  

如果您使用了任何返回Exchange的接收方法   然后你需要在完成使用后调用此方法   返回交流。

     

- ConsumerTemplate documentation

尝试在consumerTemplate.stop()之前添加以下内容:

consumerTemplate.doneUoW(resourceExchange);