在没有轮询器的情况下使用Spring Integration FTP客户端

时间:2015-07-06 19:38:27

标签: spring ftp spring-integration ftp-client

希望有人可以帮我解决这个问题......

我们有以下用例:根据请求,连接到远程FTP服务器,最多尝试3次下载文件(其名称和路径由调用者提供)。断开与远程FTP服务器的连接。等待下一个请求。

由于Spring框架不提供FTP客户端解决方案,我们使用Spring Integration来实现此目的。我们遇到的问题是FTP入站通道适配器需要设置轮询器来连续轮询远程服务器。在我们的例子中,我们只需要轮询3次然后断开连接。然后等待下一个请求等等。

有没有办法用Spring Integration做到这一点?我们还有其他什么选择?

2 个答案:

答案 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>