J'ai un flux qui extrait des fichiers d'un connecteur SFTP dans Mule. L'application n'a pas l'autorisation de supprimer les fichiers une fois traités. Pour éviter le traitement en double, l'application utilise un filtre idempotent basé sur le nom de fichier et l'horodatage.Le point de terminaison entrant SFTP Mule n'expose pas l'horodatage
Le SFTP ne renvoie pas l'horodatage de chaque fichier dans le message. Par conséquent, message.inboundProperties.timestamp renvoie la valeur null.
<!-- SFTP connector -->
<sftp:connector
name="SFTP_Origin"
validateConnections="true"
pollingFrequency="${sftp.origin.pollingFrequency:60000}"
fileAge="${sftp.origin.fileAge:60000}"
duplicateHandling="overwrite"
doc:name="SFTP"
archiveDir="${local.archive.directory}"/>
<!-- Move XML files from one SFTP location to another location.
Archive each file locally on the mule server in the event the file transfer fails.
Upon failure, notify those responsible so that action can be remedied. -->
<flow name="TransferFilesViaSFTP_Flow" >
<sftp:inbound-endpoint
connector-ref="SFTP_Origin"
host="${sftp.origin.host}"
port="${sftp.origin.port:22}"
path="${sftp.origin.path}"
user="${sftp.origin.user}"
password="${sftp.origin.password}"
responseTimeout="10000"
archiveDir="${local.archive.directory}"
doc:name="InboundSFTPEndpoint">
<!-- Use RegEx filter to filter only files with within the proper date format YYYYMMdd
Range of dates are from 19000101 to 20991231 -->
<file:filename-regex-filter pattern="${regex.filter:filename(.*)xml}" caseSensitive="false"/>
</sftp:inbound-endpoint>
<!-- Get the files via SFTP -->
<logger
message="#[message]"
level="INFO"
category="sftp"
doc:name="Logger"/>
<!-- Eliminate redundant file transfers by filtering out files that have
been transfered previously, unless their timestamp has changed. -->
<idempotent-message-filter
idExpression="#[message.inboundProperties.originalFilename + '-' +
message.inboundProperties.timestamp]"
storePrefix="prefix"
doc:name="Filter out redundant files transfers">
<simple-text-file-store
name="filesMessages"
directory="${idempotent.directory}"/>
</idempotent-message-filter>
<!-- log event information -->
<logger
message="#['Payload after SFTP is ' + payload]"
level="DEBUG"
doc:name="Payload Logger"
category="sftp"/>
<!-- Send the files to Windows Share -->
<file:outbound-endpoint
path="${windows.share.path}"
connector-ref="WindowsShareFile"
responseTimeout="10000"
doc:name="File"/>
<!-- log event information -->
<logger
message="#['file ' + message.inboundProperties.'originalFilename' + ' successfully processed.']"
level="INFO"
category="sftp"
doc:name="Logger: Success"/>
<!-- Based on property, smtp.onSuccess.sendEmail, notify when files have been moved successfully. -->
<expression-filter
expression="#[${smtp.onSuccess.sendEmail:false}]"
doc:name="onSuccess Send Email"/>
<set-session-variable
variableName="emailSubject"
value="#['Mule Flow Successful']"
doc:name="emailSubject"/>
<flow-ref
name="aggregateSuccessfulFilesTransferForEmail_Subflow"
doc:name="aggregateSuccessfulFilesTransferForEmail_Subflow"/>
<!-- default exception strategy -->
<exception-strategy
ref="transferFilesExceptionStrategy"
doc:name="Reference Exception Strategy"/>
</flow>
J'ai trouvé ce qui semble être un problème non résolu avec ceci sur Mulesoft. https://www.mulesoft.org/jira/browse/MULE-7175
Existe-t-il une méthode alternative pour obtenir l'horodatage du fichier à partir du connecteur SFTP?