2016-06-15 8 views
0

Während ich versuche, zwei Dateien (sagen File1.txt und File.txt) mit Hilfe von MuleRequester zu verschieben. MuleRequester wählt Datei1 zweimal aus. Anstatt sollte zuerst File1 und dann File2 wählen. Kann mir bitte jemand helfen, die Lösung zu liefern? Ich benutze 3.8.0 Laufzeit. Momentaufnahme des Flusses für Ihre bereite ReferenzMule Requester - Die gleiche Datei auswählen

enter image description here

Hinweis hat angebracht: Http Anforderer nur auf der Ausführung Benutzer angetrieben machen verwendet.

+1

Wie groß ist Ihre Datei File1.txt? Wenn es nicht klein ist, versuchen Sie, die Abfragefrequenz in der SFTP-Steckerkonfiguration zu erhöhen. Standardmäßig sind es 1000ms. Meine Vermutung ist, dass der Mule-Requester versucht, die gleiche Datei erneut zu lesen, bevor die Datei zum ersten Mal gestreamt wurde. – tortoise

+1

Sie müssen sicherstellen, dass der Dateiinhalt konsumiert wird. Können Sie versuchen, einen Object to String-Transformer zu setzen und zu überprüfen, ob die Datei gelöscht wird? – clare

+0

Danke für Ihre Antwort Shamim! Die Dateigröße beträgt nur 1-2 kb. Ich habe es auch mit dem Transceiver Object to String versucht, scheint aber kein Glück zu haben. – Maddy

Antwort

0

Immer wenn Sie die Datei/SFTP/FTP-Komponente verwenden, sollten Sie beim Abrufen und FileAge vorsichtiger sein (wenn für eine lange Größe erforderlich). Basierend auf Ihrer Größe der Nutzlast müssen wir die Abfragehäufigkeit erhöhen. Wenn die Dateigröße groß ist und die Abruffrequenz geringer ist, wird sie möglicherweise mehrmals gelesen, was zu Problemen führt.

Stellen Sie außerdem sicher, dass Ihre Datei gelöscht wird, sobald die Datei gelesen wird.

Unten Konfiguration funktioniert gut.

<file:connector name="FileCon" autoDelete="true" streaming="false" validateConnections="true" doc:name="File" fileAge="50" pollingFrequency="2000"/> 
<flow name="removeFlow"> 
    <http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP"/> 
    <set-payload value="#['test']" doc:name="Set Payload"/> 
    <async doc:name="Async"> 
     <logger level="INFO" doc:name="Logger"/> 
     <mulerequester:request-collection config-ref="Mule_Requester" resource="file://c:/in?connector=FileCon" timeout="30000" count="2" doc:name="Mule Requester" throwExceptionOnTimeout="true" /> 
     <logger level="INFO" doc:name="Logger"/> 
     <foreach doc:name="For Each"> 
      <file:outbound-endpoint path="c:/out" outputPattern="#[server.nanoTime()]#[function:uuid].txt" responseTimeout="10000" doc:name="File"/> 
     </foreach> 
    </async> 
</flow> 
0

Der Anforderer kann Dateien in einem SFTP-Pfad nicht selbst durchlaufen. Wenn Sie die erste Datei nicht aus dem Pfad des zweiten Zugriffs entfernen, erhält sie dieselbe Datei erneut. Wenn Sie versuchen, eine Sammlung von Dateien zu erhalten, wird die gleiche Datei immer wieder angezeigt. Dieser zweite Punkt, IMO, ist ein Fehler im Anforderer und sollte korrigiert werden. In jedem Fall ist das Ergebnis, dass Sie nicht mit dem Requester zur zweiten Datei im Verzeichnis gelangen, ohne die erste Datei zu verwenden, um sie aus dem Pfad zu entfernen, oder wenn Sie einen Wildcard- oder Regex-Filter verwenden, der die Datei nicht mehr Ihren Anforderungskriterien entspricht .

Eine Option besteht darin, eine Liste von Dateien zu erhalten und dann Ihre Anforderungs-URL aus der Liste der Dateien zu erstellen. Dazu müssen Sie jedoch separat auf den SFTP-Server zugreifen, um diese Liste zu erhalten, oder einfach die Namen der Dateien kennen suche nach bevor du versuchst sie anzufordern.

+0

Danke für Ihre Antwort ... Ihre Antwort auf Problem macht Sinn! – Maddy

+0

Senden des Codes. Ich habe unten Sachen versucht, – Maddy

+0

Senden des Codes. Ich habe versucht, unter Dinge, 1) Input-Ordner - File1 und File2.txt 2) Mule Requester - Problem, das ich mit Mule gefunden habe, wenn ich SFTP Endpunkt-Connector mit Datei-Option als autoDelete = True, es spiegelt sich nicht in Datei config.xml. SO - Ich muss manuell einen Eintrag machen. 3) Ich habe das SFTP von For-Each entfernt und es mit Logger platziert, nur um den Dateiinhalt zu überprüfen. – Maddy