1

我为 ls、get、rm 配置了一个简单的 ftp 出站网关

    <int-ftp:outbound-gateway id="gatewayLS" 
    cache-sessions="false" 
    session-factory="incomingCachingSessionFactory"
    request-channel="inboundChannel" 
    command="ls" 
    command-options="-1" 
    expression="'${ftp.pull.remote.directory}'"
    reply-channel="toSplitter" />

<channel id="toSplitter">
    <interceptors>
        <wire-tap channel="logger" />
    </interceptors>
</channel>

<logging-channel-adapter id="logger"
    log-full-message="true" level="DEBUG" />

<splitter id="splitter" input-channel="toSplitter"
    output-channel="toGet" />

<int-ftp:outbound-gateway id="gatewayGET"
    cache-sessions="false"
    local-directory="${ftp.pull.local.directory}"
    session-factory="incomingCachingSessionFactory" 
    request-channel="toGet"
    reply-channel="downloadedFileChannel" 
    command="get" 
    command-options="-P"
    expression="headers['file_remoteDirectory'] + '/' + payload" />

这在我的开发窗口中完美运行,连接到多个不同的 FTP 服务器。

我的日志输出预期

DEBUG: org.springframework.integration.ftp.session.DefaultFtpSessionFactory - Connected to server [ftp.domain.com:21]
DEBUG: org.springframework.integration.ftp.gateway.FtpOutboundGateway - handler 'org.springframework.integration.ftp.gateway.FtpOutboundGateway#0' sending reply Message: [Payload=[test_file.zip]][Headers={timestamp=1343143242030, id=56758ef9-57e5-43d6-b8b7-c36539d9fd0d, file_remoteDirectory=/images/}]

“连接到服务器”和“发送回复消息”之间的时间也几乎是瞬时的

但是,一旦部署到 2x Centos 服务器(5.8 和 6.2),LS 的回复通道总是空的,例如

DEBUG: org.springframework.integration.ftp.session.DefaultFtpSessionFactory - Connected to server [ftp.domain.com:21]
DEBUG: org.springframework.integration.ftp.gateway.FtpOutboundGateway - handler 'org.springframework.integration.ftp.gateway.FtpOutboundGateway#0' sending reply Message: [Payload=[]][Headers={timestamp=1343143961046, id=31759d6f-201e-4028-8943-0a68ae64db81, file_remoteDirectory=/images/}]

“连接到服务器”和“发送回复消息”之间的时间也异常长。

更多信息:

  • 所有 3 台机器都使用 maven 从相同的代码库构建 WAR。

  • 2 台 centos 机器位于不同的数据中心

  • 我尝试了多个不同的不相关的 FTP 服务器,结果相同

  • ftp 服务器上肯定有文件

  • ftp 服务器可以在 centos 盒子上访问,使用“ncftp”和“ftp”确认

我知道这篇文章很模糊,但它让我发疯。任何想法都非常感谢

4

1 回答 1

1

我不得不设置<property name="clientMode" value="2" />我的DefaultFtpSessionFactory

于 2012-07-24T22:36:30.390 回答