2013-03-21 57 views
5

我想在特定時間間隔內從特定目錄一次輪詢10個文件。如果在該目錄中存在250個文件,Mule文件入站應該從250中取出10個文件,然後再處理它們10個文件等等。我有輪詢頻率值「10000」Mule文件入站輪詢配置

我試圖應用maxThreadsActive這樣但它does not工作

<file:connector> 
<receiver-thread-profile maxThreadsActive=10/> 
</file:connector> 

回答

12

Mule讓你覆蓋傳輸實現的某些部分。在這種情況下,您應該覆蓋org.mule.transport.file.FileMessageReceiver,特別是listFiles()方法。

public class MyFileMessageReceiver extends FileMessageReceiver 
{ 
    private static final MAX_FILES = 10; 

    @Override 
    List<File> listFiles() throws MuleException 
    { 
     try 
     { 
      List<File> files = new ArrayList<File>(); 
      this.basicListFiles(readDirectory, files); 

      if(files.isEmpty()) 
       return NO_FILES; 

      if(files.size() > MAX_FILES) 
       return files.subList(0, MAX_FILES); 
      else 
       return files; 
     } 
     catch (Exception e) 
     { 
      throw new DefaultMuleException(FileMessages.errorWhileListingFiles(), e); 
     } 
    } 
} 

然後,將創建使用您的信息接收器

<file:connector name="inboundFileConnector"> 
    <service-overrides messageReceiver="org.mule.transport.file.MyFileMessageReceiver"/> 
</file:connector> 

最後,您可以使用此連接器,在您的配置文件的任何入境端點的連接器。您只需指定輪詢頻率,即可完成。

HTH

+0

這裏我們不能重寫listFiles()方法,因爲方法是使用默認的訪問說明符。那麼有沒有其他方法可以做到這一點?謝謝 – user2181841 2013-04-05 07:36:53

+0

一個不那麼優雅的解決方案是用'FileMessageReceiver'的代碼擴展'AbstractPollingMessageReceiver'。對於'lisfFiles()'方法,在答案中使用自定義代碼。我會更新我的答案,以糾正這個 – Daniel 2013-04-05 12:41:17

+0

嘿我解決了它通過覆蓋文件消息接收器的民意調查()現在代碼工作正常...謝謝你這麼多的時間ñ幫助.... – user2181841 2013-04-08 09:07:04