2016-07-31 5 views
0

ich Spring Integration in meinem Projekt verwenden, ich habe einen int-ftp:inbound-channel-adapter in meinem Zusammenhang wie folgt:int-ftp: Inbound-Channel-Adapter sollte nach ein paar Minuten der Arbeit neu gestartet werden?

<int-ftp:inbound-channel-adapter id="test-inbound-channel-adapter" 
            channel="tmp-channel" 
            session-factory="ftp-Session" 
            auto-create-local-directory="true" 
            delete-remote-files="true" 
            auto-startup="${ftp.active}" 
            filename-regex="my regex ...." 
            remote-directory="${ftp.input.path}" 
            remote-file-separator="/" 
            local-filename-generator-expression="@fileNameGenerator.generateNameBy('test',#this)" 
            temporary-file-suffix=".writing" 
            local-directory="${backupRootPath}/test/tmp//"> 
     <int:poller fixed-rate="10000"/> 
    </int-ftp:inbound-channel-adapter> 

es richtig funktioniert, aber nach ein paar Minuten Arbeit und System nicht sollte Neustart sein mit FTP-Server arbeiten, Fehler log wie folgt:

2016-07-31 17:11:08.381 ERROR 2980 --- [sk-scheduler-10] o.s.integration.handler.LoggingHandler : org.springframework.messaging.MessagingException: Problem occurred while synchronizing remote to local directory; nested exception is org.springframework.messaging.MessagingException: Failure occurred while copying from remote to local directory; nested exception is java.net.SocketTimeoutException: Read timed out 
    at org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizer.synchronizeToLocalDirectory(AbstractInboundFileSynchronizer.java:266) 
    at org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizingMessageSource.doReceive(AbstractInboundFileSynchronizingMessageSource.java:193) 
    at org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizingMessageSource.doReceive(AbstractInboundFileSynchronizingMessageSource.java:59) 
    at org.springframework.integration.endpoint.AbstractMessageSource.receive(AbstractMessageSource.java:134) 
    at org.springframework.integration.endpoint.SourcePollingChannelAdapter.receiveMessage(SourcePollingChannelAdapter.java:175) 
    at org.springframework.integration.endpoint.AbstractPollingEndpoint.doPoll(AbstractPollingEndpoint.java:224) 
    at org.springframework.integration.endpoint.AbstractPollingEndpoint.access$000(AbstractPollingEndpoint.java:57) 
    at org.springframework.integration.endpoint.AbstractPollingEndpoint$1.call(AbstractPollingEndpoint.java:176) 
    at org.springframework.integration.endpoint.AbstractPollingEndpoint$1.call(AbstractPollingEndpoint.java:173) 
    at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller$1.run(AbstractPollingEndpoint.java:330) 
    at org.springframework.integration.util.ErrorHandlingTaskExecutor$1.run(ErrorHandlingTaskExecutor.java:55) 
    at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50) 
    at org.springframework.integration.util.ErrorHandlingTaskExecutor.execute(ErrorHandlingTaskExecutor.java:51) 
    at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller.run(AbstractPollingEndpoint.java:324) 
    at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) 
    at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.springframework.messaging.MessagingException: Failure occurred while copying from remote to local directory; nested exception is java.net.SocketTimeoutException: Read timed out 
    at org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizer.copyFileToLocalDirectory(AbstractInboundFileSynchronizer.java:295) 
    at org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizer$1.doInSession(AbstractInboundFileSynchronizer.java:234) 
    at org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizer$1.doInSession(AbstractInboundFileSynchronizer.java:223) 
    at org.springframework.integration.file.remote.RemoteFileTemplate.execute(RemoteFileTemplate.java:410) 
    at org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizer.synchronizeToLocalDirectory(AbstractInboundFileSynchronizer.java:223) 
    ... 22 more 
Caused by: java.net.SocketTimeoutException: Read timed out 
    at java.net.SocketInputStream.socketRead0(Native Method) 
    at java.net.SocketInputStream.read(SocketInputStream.java:150) 
    at java.net.SocketInputStream.read(SocketInputStream.java:121) 
    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284) 
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326) 
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178) 
    at java.io.InputStreamReader.read(InputStreamReader.java:184) 
    at java.io.BufferedReader.fill(BufferedReader.java:161) 
    at java.io.BufferedReader.read(BufferedReader.java:182) 
    at org.apache.commons.net.io.CRLFLineReader.readLine(CRLFLineReader.java:58) 
    at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:314) 
    at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:294) 
    at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:483) 
    at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:821) 
    at org.apache.commons.net.ftp.FTPClient._retrieveFile(FTPClient.java:1854) 
    at org.apache.commons.net.ftp.FTPClient.retrieveFile(FTPClient.java:1845) 
    at org.springframework.integration.ftp.session.FtpSession.read(FtpSession.java:81) 
    at org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizer.copyFileToLocalDirectory(AbstractInboundFileSynchronizer.java:288) 
    ... 26 more 

Wie man es repariert?

Vielen Dank im Voraus

+0

Das ergibt keinen Sinn. Teilen, bitte, mehr Symptome wie Stack-Traces, Protokolle, vielleicht sogar etwas von unserer Seite vor Ort zu spielen ... Oder das könnte einige Ihrer FTP-Server Einschränkungen sein und einige Optionen sollten für Ihren Kunden in seinen Richtlinien eingeschaltet sein –

+0

Dank @ArtemBilan für antworten Sie mir, der Beitrag wurde bearbeitet –

Antwort

1

Versuchen Sie, Ihre DefaultFtpSessionFactory anpassen. Zum Beispiel Client-Modus:

/** 
* ACTIVE_LOCAL_DATA_CONNECTION_MODE = 0 <br> 
* A constant indicating the FTP session is expecting all transfers 
* to occur between the client (local) and server and that the server 
* should connect to the client's data port to initiate a data transfer. 
* This is the default data connection mode when and FTPClient instance 
* is created. 
* PASSIVE_LOCAL_DATA_CONNECTION_MODE = 2 <br> 
* A constant indicating the FTP session is expecting all transfers 
* to occur between the client (local) and server and that the server 
* is in passive mode, requiring the client to connect to the 
* server's data port to initiate a transfer. 
* 
* @param clientMode The client mode. 
*/ 
public void setClientMode(int clientMode) { 

Es gibt andere Optionen über Timeouts:

/** 
* Set the connect timeout for the socket. 
* @param connectTimeout the timeout 
*/ 
public void setConnectTimeout(int connectTimeout) { 
    this.connectTimeout = connectTimeout; 
} 

/** 
* Set the (socket option) timeout on the command socket. 
* @param defaultTimeout the timeout. 
*/ 
public void setDefaultTimeout(int defaultTimeout) { 
    this.defaultTimeout = defaultTimeout; 
} 

/** 
* Set the (socket option) timeout on the data connection. 
* @param dataTimeout the timeout. 
*/ 
public void setDataTimeout(int dataTimeout) { 
    this.dataTimeout = dataTimeout; 
} 

Natürlich, das wäre viel besser mit Ihrem FTP-Server zu konsultieren, um festzustellen, warum es nicht Ihre Verbindungen mag und lässt sie fallen.

+0

Bitte lassen Sie uns wissen, was das Problem wirklich war –

+0

Dank @ArtemBilan für mich zu unterstützen, sehe ich 'vsftp 'auf FTP-Server anmelden, wenn ich Befehl über' Int-ftp: eingehende- senden channel-adapter erstellt die neue Verbindung mit Server und nach einigen Minuten, Server-Verbindungen Ist zu viel, kann es mein Problem verursachen? –

Verwandte Themen