连接重置后,FTP入站通道适配器停止工作

时间:2015-01-07 09:05:49

标签: spring ftp spring-integration

我们目前正在使用Spring Integration 3.0.2轮询一个用于XLSX文件的FTP文件夹。 重置数据连接时,轮询器会停止工作。 FTP服务器上的所有文件都保留在FTP上,因此不执行轮询。

我已经读过SI的v 3.0之前,连接被缓存了,并且引起了一些问题,但通常不应该这样,因为我们使用普通的FtpSessionFactory。

堆栈跟踪:

2015-01-06 16:26:15,444 ERROR [] () [de.hybris.platform.acceleratorservices.dataimport.batch.task.ErrorHandler] unexpected exception caught
org.springframework.integration.MessagingException: Problem occurred while synchronizing remote to local directory
    at org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizer.synchronizeToLocalDirectory(AbstractInboundFileSynchronizer.java:189)
    at org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizingMessageSource.receive(AbstractInboundFileSynchronizingMessageSource.java:162)
    at org.springframework.integration.endpoint.SourcePollingChannelAdapter.receiveMessage(SourcePollingChannelAdapter.java:111)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint.doPoll(AbstractPollingEndpoint.java:184)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint.access$000(AbstractPollingEndpoint.java:51)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint$1.call(AbstractPollingEndpoint.java:143)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint$1.call(AbstractPollingEndpoint.java:141)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller$1.run(AbstractPollingEndpoint.java:273)
    at org.springframework.integration.util.ErrorHandlingTaskExecutor$1.run(ErrorHandlingTaskExecutor.java:52)
    at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:49)
    at org.springframework.integration.util.ErrorHandlingTaskExecutor.execute(ErrorHandlingTaskExecutor.java:49)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller.run(AbstractPollingEndpoint.java:268)
    at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:53)
    at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.integration.MessagingException: Failed to execute on session
    at org.springframework.integration.file.remote.RemoteFileTemplate.execute(RemoteFileTemplate.java:306)
    at org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizer.synchronizeToLocalDirectory(AbstractInboundFileSynchronizer.java:163)
    ... 20 more
Caused by: java.lang.IllegalStateException: failed to create FTPClient
    at org.springframework.integration.ftp.session.AbstractFtpSessionFactory.getSession(AbstractFtpSessionFactory.java:139)
    at org.springframework.integration.file.remote.RemoteFileTemplate.execute(RemoteFileTemplate.java:295)
    ... 21 more
Caused by: java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:196)
    at java.net.SocketInputStream.read(SocketInputStream.java:122)
    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283)
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)
    at java.io.InputStreamReader.read(InputStreamReader.java:184)
    at java.io.BufferedReader.fill(BufferedReader.java:154)
    at java.io.BufferedReader.read(BufferedReader.java:175)
    at org.apache.commons.net.io.CRLFLineReader.readLine(CRLFLineReader.java:58)
    at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:310)
    at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:290)
    at org.apache.commons.net.ftp.FTP._connectAction_(FTP.java:392)
    at org.apache.commons.net.ftp.FTPClient._connectAction_(FTPClient.java:764)
    at org.apache.commons.net.SocketClient.connect(SocketClient.java:169)
    at org.apache.commons.net.SocketClient.connect(SocketClient.java:189)
    at org.springframework.integration.ftp.session.AbstractFtpSessionFactory.createClient(AbstractFtpSessionFactory.java:152)
    at org.springframework.integration.ftp.session.AbstractFtpSessionFactory.getSession(AbstractFtpSessionFactory.java:136)
    ... 22 more

配置:

<int:channel id="ftpChannel">
    <int:queue/>
</int:channel>

<bean id="ftpSessionFactory"
    class="org.springframework.integration.ftp.session.DefaultFtpSessionFactory">
    <property name="host" value="abcd.com"/>
    <property name="port" value="21"/>
    <property name="username" value="username"/>
    <property name="password" value="password"/>
    <property name="fileType" value="2"/>
    <property name="clientMode" value="2" />
</bean>

<int-ftp:inbound-channel-adapter id="supplierImportFtpChannel"
                                 channel="ftpChannel"
                                 session-factory="ftpSessionFactory"
                                 local-directory="/localdirectory"
                                 remote-directory="/ftpdirectory"
                                 filename-regex=".*\.xlsx$"
                                 delete-remote-files="true"
                                 temporary-file-suffix=".writing">
    <int:poller fixed-rate="1000"/>
</int-ftp:inbound-channel-adapter>

我有什么遗失的吗?

1 个答案:

答案 0 :(得分:1)

框架中没有任何东西会停止&#34;停止&#34;这样的例外之后的轮询者。

很可能轮询程序线程在下一次尝试连接到服务器的轮询中挂起 - 您可以使用线程转储验证(使用jstack)。

连接时没有超时(默认情况下)。

从4.0开始,您现在可以直接在DefaultFtpSessionFactoryconfigure timeouts;在4.0之前,您必须使用described in the documentation技术(向下滚动到高级配置)。