希望有人可以帮我解决这个问题......
我们有以下用例:根据请求,连接到远程FTP服务器,最多尝试3次下载文件(其名称和路径由调用者提供)。断开与远程FTP服务器的连接。等待下一个请求。
由于Spring框架不提供FTP客户端解决方案,我们使用Spring Integration来实现此目的。我们遇到的问题是FTP入站通道适配器需要设置轮询器来连续轮询远程服务器。在我们的例子中,我们只需要轮询3次然后断开连接。然后等待下一个请求等等。
有没有办法用Spring Integration做到这一点?我们还有其他什么选择?
答案 0 :(得分:1)
Spring Integration FTP模块为您的案例提供<int-ftp:outbound-gateway>
GET
命令。此外,retry
和<request-handler-advice-chain>
还有RequestHandlerRetryAdvice
支持开箱即用。
有关更多信息,请参阅Spring Integration Reference Manual。
答案 1 :(得分:1)
感谢Artem指出我正确的方向。发现这个link非常有用。
这里是从该链接获取的修改后的FtpOutboundGatewaySample-context.xml,它从FTP服务器下载a.txt文件。请注意,出于性能原因,它不执行LS和RM命令(仅限MGET):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:int="http://www.springframework.org/schema/integration"
xmlns:int-ftp="http://www.springframework.org/schema/integration/ftp"
xsi:schemaLocation="http://www.springframework.org/schema/integration/ftp http://www.springframework.org/schema/integration/ftp/spring-integration-ftp.xsd
http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:property-placeholder location="classpath:user.properties"/>
<int:gateway id="gw" service-interface="org.springframework.integration.samples.ftp.ToFtpFlowGateway"
default-request-channel="inbound"/>
<bean id="ftpSessionFactory"
class="org.springframework.integration.ftp.session.DefaultFtpSessionFactory">
<property name="host" value="${host}"/>
<property name="port" value="${availableServerPort}"/>
<property name="username" value="${userid}"/>
<property name="password" value="${password}"/>
</bean>
<int-ftp:outbound-gateway id="gatewayGET"
local-directory="#{ T(org.springframework.integration.samples.ftp.TestSuite).LOCAL_FTP_TEMP_DIR}/gatewayGET"
session-factory="ftpSessionFactory"
request-channel="inbound"
command="mget"
command-options="-P"
expression="'a.txt'"/>
</beans>