多次使用 Camel ConsumerTemplate 下载文件

Download the file using Camel ConsumerTemplate multiple times

我正在尝试使用 Camel ConsumerTemplate 多次下载同一个文件。它没有被多次下载,但我在使用 camel route 时完成了它。 我想 多次使用 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"/>

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

If you have used any of the receive methods which returns a Exchange type then you need to invoke this method when you are done using the returned Exchange.

-- ConsumerTemplate documentation

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

consumerTemplate.doneUoW(resourceExchange);