我为 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”确认
我知道这篇文章很模糊,但它让我发疯。任何想法都非常感谢