Я использую mule для обработки файлов из sftp, но мне нужно обработать файл по порядку (последовательность упорядочена по имени файла).
Например: есть 3 файла в SFTP:
1.txt, 2.txt, 3.txt
мне нужно обработать эти три файла по одному и должны в порядке имя файла (первый. обрабатывать 1.txt, затем 2.txt, наконец, 3.txt)
Я использую служебные переопределения в коннекторе и расширяю SftpMessageReceiver и переопределяю метод poll(), в методе я создаю эти файлы по порядку. Но это не работает. Кто может сказать мне, где не так.
класс я пишу
Mule ESB: добавить <service-overrides messageReceiver = "myReceiver"> в sftp разъем не работает
public class NewSftpMessageReceiver extends SftpMessageReceiver {
private SftpReceiverRequesterUtil sftpRRUtil = null;
public NewSftpMessageReceiver(SftpConnector connector,
FlowConstruct flow,
InboundEndpoint endpoint,
long frequency) throws
CreateException {
super(connector, flow, endpoint);
this.setFrequency(frequency);
sftpRRUtil = new SftpReceiverRequesterUtil(endpoint);
}
public NewSftpMessageReceiver(SftpConnector connector, FlowConstruct flow, InboundEndpoint endpoint)
throws
CreateException {
super(connector, flow, endpoint);
sftpRRUtil = new SftpReceiverRequesterUtil(endpoint);
}
@Override
public void poll() throws
Exception {
try {
String[] files = sftpRRUtil.getAvailableFiles(false);
//do something here.....
for (String file : files) {
if (getLifecycleState().isStopping()) {
break;
}
routeFile(file);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
конфигурационный файл, как показано ниже
<sftp:connector name="incoming-mandate-connector"
archiveDir="${esb.archive.path}/mandate/incoming"
useTempFileTimestampSuffix="true"
autoDelete="true"
identityFile="${esb.incoming.sftp.identityFile}"
passphrase="${esb.incoming.sftp.passphrase}"
sizeCheckWaitTime="${esb.incoming.sftp.sizeCheckWaitTime}">
<service-overrides messageReceiver="com.xxy.NewSftpMessageReceiver"/>
</sftp:connector>
<sftp:endpoint name="incoming-mandate-ep"
address="${esb.incoming.connector}"
connector-ref="incoming-mandate-connector"
keepFileOnError="true" encoding="${esb.encoding}">
<file:filename-wildcard-filter pattern="${esb.incoming.filePattern}"/>
</sftp:endpoint>
поток, как взрывали
<flow name="process">
<quartz:inbound-endpoint name="quartz-endpoint" cronExpression="${esb.cronExpression}" jobName="incoming-mandate-job">
<quartz:endpoint-polling-job>
<quartz:job-endpoint ref="incoming-mandate-ep"/>
</quartz:endpoint-polling-job>
</quartz:inbound-endpoint>
<processor ref="mandate-processor"/>
<transformer ref="mandate-transformer"/>
<mulexml:jaxb-object-to-xml-transformer jaxbContext-ref="jaxb" name="mandate-jaxb-transformer"/>
<byte-array-to-string-transformer mimeType="application/xml"/>
<message-properties-transformer scope="outbound">
<add-message-property key="${esb.username}" value="${esb.password}"/>
</message-properties-transformer>
<outbound-endpoint ref= "mandate-service-ep"/>
</flow>
Может ли вы отправить полную конфигурацию? Также добавьте регистратор в пользовательский приемник, чтобы узнать, вызвано ли оно или нет. – Seba
Я попытался добавить регистратор в приемник custome, но нет печати журнала (я имею в виду, что он не вызывается). Я не знаю, где я ошибаюсь. (Я использую mule3.2.0) – xxy
Все еще отсутствует конфигурация. – Seba