2017-08-09 48 views
0

我試圖用多次下載同一個文件駱駝ConsumerTemplate。它沒有得到多次下載,但我正在使用駱駝路線完成。 我想使用ConsumerTemplate多次下載文件

這是我與ConsumerTemplate試圖代碼:多次使用Camel 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://[email protected]: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://[email protected]:22/myfiles?password=password&amp;noop=true&amp;idempotent=false&amp;readLockMarkerFile=false&amp;readLock=none&amp;filter=#myFileFilter"/> 
+0

你有使用'SFTP交換性質://測試儀@本地:22/myfiles的密碼= password&noop = true&idempotent = false&readLockMarkerFile = false&readLock = none&filter =#myFileFilter「'name/key? – mgyongyosi

+0

@mgyongyosi對不起,我在簡化代碼的時候犯了一個錯誤,實際上是從駱駝交換中取出另一個指定的屬性,現在就更正了 – Usr1123

+0

你確定在所需的文件是在位置?你能張貼你的路線嗎?另外,您的處理器像Content Enricher一樣工作,爲什麼不使用Camel的'pollEnrich(uri)'DSL功能? (http://camel.apache.org/content-enricher.html) – mgyongyosi

回答

3

由於文檔指出應該叫ConsumerTemplate的 - doneUoW(Exchange)功能:

如果你已經使用過任何返回一個交易所 類型,那麼你需要你的時候調用該方法,接收方法使用 返回的Exchange完成。 ?

- ConsumerTemplate documentation

嘗試添加以下之前consumerTemplate.stop()

consumerTemplate.doneUoW(resourceExchange);