2016-06-29 97 views
0

我有看起來像下面Apache的駱駝pollEnrich不復制所有

from("activemq:queue:upload") 
    .pollEnrich().simple("file:basePath/${header.ID}?noop=true&recursive=true") 
    .aggregationStrategy(new ExampleAggregationStrategy()) 
    .timeout(2000) 
.toD("ftp:${header.destinationURI}") 

在我的文件系統file:basePath/${header.ID}包含多個文件夾駱駝路徑的文件。當執行上述路由時,只有第一個文件夾中的第一個文件將被複制到ftp服務器。剩餘文件夾(與子文件夾)不會被複制到FTP服務器!

而且ExampleAggregationStrategy()類的aggregate()方法看起來像下面

@Override 
     public Exchange aggregate(Exchange oldExchange, Exchange newExchange) { 
      String destinationURI = "populatedURI"; 

     oldExchange.setOut(newExchange.getIn()); 
     oldExchange.getOut().setHeader("ID", oldExchange.getIn().getHeader("ID")); 
     oldExchange.getOut().setHeader("destinationURI", destinationURI); 
     oldExchange.setFromEndpoint(newExchange.getFromEndpoint()); 
     oldExchange.setFromRouteId(newExchange.getFromRouteId()); 

      return oldExchange; 
     } 

我試過設置properties and onCompletions爲好。仍然沒有運氣! 我在aggregationStrategy裏丟失了什麼?
如何使用pollEnrich成功複製所有文件和文件夾?

回答

1

pollEnrich始終與單個文件一起使用。其背後的意圖是從端點(A)獲取內容,然後從輪詢器豐富(B)獲取內容,然後我們將這兩個內容聚合起來並寫入其他端點。

在你的情況下,A將來自(「activemq:queue:upload」)body並且B將是(「file:basePath/$ {header.ID}?noop = true & recursive = true」)。如果它找到多個文件,它只會選擇一個文件,您可以在聚合器上播放並將其寫入FTP。

+0

謝謝:)有沒有什麼辦法可以處理上面的場景,我想爲隊列中的每條消息複製所有文件(包括文件夾)? –

+0

我的需求被張貼在這裏[動態的apache-camel-build-both-to-and-to-endpoints](http://stackoverflow.com/questions/37839725/apache-camel-build-both-from-and- - 端點 - 動態) –

+0

根據隊列中的消息預先知道還是動態的文件夾? –