2013-03-21 11 views
5

Desidero eseguire il polling di 10 file alla volta a determinati intervalli di tempo da una directory specifica. Se esistono 250 file in quella directory, il file Mule in ingresso dovrebbe prendere 10 file su 250 e processarli, quindi 10 file ecc. Ho il valore di frequenza polling "10000"Configurazione polling in entrata file Mule

Ho provato ad applicare maxThreadsActive come questo ma non lo fa lavoro

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

risposta

12

Mule consente di eseguire l'override di alcune parti dell'implementazione di trasporto. In questo caso, è necessario eseguire l'override di org.mule.transport.file.FileMessageReceiver, in particolare il metodo 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); 
     } 
    } 
} 

Poi, creare un connettore che utilizzerà il ricevitore messaggio

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

Infine è possibile utilizzare questo connettore con qualsiasi file endpoint in entrata nella vostra configurazione. Devi solo specificare la frequenza di polling e il gioco è fatto.

HTH

+0

Qui non è possibile eseguire l'override del metodo listFiles(), poiché il metodo è con l'identificatore di accesso predefinito. Quindi c'è un altro modo per fare questo thats? Grazie – user2181841

+0

Una soluzione -non così elegante- è quella di estendere 'AbstractPollingMessageReceiver' con il codice di' FileMessageReceiver'. Per il metodo 'lisfFiles()' usa il codice personalizzato nella risposta. Aggiornerò la mia risposta per correggere questo – Daniel

+0

hey l'ho risolto sovrascrivendo il poll() del ricevente del messaggio di file n ora il codice sta funzionando bene ... Grazie mille per il tuo tempo n aiuto .... – user2181841