2014-02-16 75 views
0

我需要編寫一個輪詢FTP服務器音調的駱駝路由。這種情況幾乎是在這個線程中描述的:http://web.archiveorange.com/archive/v/kuUDzQRmQQIof5y9zXzGCamel Recpient列表和文件/ FTP輪詢

我正在使用Spring DSL,我似乎無法將事物拼湊在一起。那個線程中提到的模板是如何相關的?

即使使用文件協議,我也不幸運。這裏就是我試圖創建:

<from uri="file://C:/Temp?consumer.delay=1000"/> 
      <recipientList parallelProcessing="true" delimiter=","> 
       <simple>file://C:/Sampa?consumer.delay=1000</simple> 
      </recipientList> 

我不斷收到一個錯誤:

未知的文件語言的語法://C:/Sampa?consumer.delay=1000

什麼建議嗎?理想情況下,使用收件人列表和文件或ftp的簡單路由將非常感激。

回答

1

<recipientList/>標記之間的表達式必須返回不同收件人的URI。在你的情況下,你的<simple/>標籤是恆定的,實際上不是一個合理的URI,這就是爲什麼你得到Unknown file language syntax: //C:/Sampa?consumer.delay=1000錯誤消息。

一個好的方法是使用可以動態更新,如

<route> 
    <from uri="file:src/data2?noop=true"/> 
    <recipientList parallelProcessing="true" delimiter=","> 
     <header>myHeader</header> 
    </recipientList> 
</route> 

查找收件人列表模式here更多信息頭。

編輯:

recipientList/>僅用於一個消息的在到不同的目標的路線的動態分佈。如果您需要動態定義源文件(如不同的文件目錄或FTP服務器),那麼您可以使用Camel的Java API動態設置路由。

pzbkuc class DynamicRouteBuilder extends RouteBuilder { 

    private final String[] fileNames; 

    public DynamicRouteBuilder(final String[] fileNames) { 
     this.fileNames = fileNames; 
    } 

    @Override 
    public void configure() { 
     for (final String fileName : this.fileNames) { 
      from("file:" + fileName).to("file:targetDirectory"); 
     } 
    } 

} 
+0

感謝Peter。我想我仍然感到困惑。你如何從recipientList標籤去實際處理文件。說,我只是想記錄從一個FTP服務器列表中拉出的一些文件的內容。現在讓我們假設列表是計算出來的,並放在一個頭上或者用簡單的動態計算機。你會在第一個例子中將這個日誌指令放在上面的recipientList中?另外,爲什麼上述不合理的網址?我想我仍然缺少如何將recipientList與文件prducer或FTP生產者連接。 – Klaus

+0

我添加了一個額外的例子。我希望它有幫助。 –

+0

我懷疑我們正在談論兩件不同的事情。看起來您正在建議一種機制來輪詢一個單一來源並將輸入文件發送給不同的收件人。我想要的是一種輪詢多個源的機制,從它們下載文件並將它們發送給一個單個收件人。對不起,如果我不夠清楚。 – Klaus