如何使用 int-ftp:outbound-gateway 从 ftp 服务器接收目录或文件列表?

How to receive list of directories or file from ftp server with int-ftp:outbound-gateway?

我定义了 ftp 适配器以连接到 ftp 服务器,但我看到 ftp 服务器日志,但没有看到发送到 ftp 服务器的请求。我的适配器代码是:

<bean id="ftpClientFactory" class="org.springframework.integration.ftp.session.DefaultFtpSessionFactory">
    <property name="host" value="127.0.0.1"/>
    <property name="port" value="21"/>
    <property name="username" value="banks_reader"/>
    <property name="password" value="123456"/>
    <property name="clientMode" value="2"/>
    <property name="fileType" value="2"/>

</bean>


<int:channel id="inbound1">
    <int:queue/>
</int:channel>
<int:channel id="outbound"/>
<int-ftp:outbound-gateway id="gateway1"
                          session-factory="ftpClientFactory"
                          request-channel="inbound1"
                          reply-channel="outbound"
                          reply-timeout="777"
                          auto-create-local-directory="false"
                          auto-startup="true"
                          filename-pattern="*"
                          remote-file-separator="/"
                          command="ls"
                          command-options="-1 -f"
                          expression="payload"
                          order="1"
                          mput-regex=".*">
    <int:poller fixed-delay="1000"/>
</int-ftp:outbound-gateway>

显示:

DEBUG PollingConsumer:208 - Received no Message during the poll, returning 'false' in application log

当更改用户名和密码进行测试时(假密码和用户名)不更改任何内容并抛出异常

你的配置看起来不错,但你错过了一点方法。 <int-ftp:outbound-gateway> 是一个事件驱动的 request/reply 组件,在 inbound1 中没有 message 之前,它无法对 FTP 做任何事情。 即使是<queue><poller>只有在没有Received no Message during the poll.

的情况下才会开始工作

由于您使用 expression="payload",因此您的 requestMessage 必须包含 payload 和来自 FTP 用户主页的 remote dir

所以,只需将这样的消息发送到 inbound1,让我们知道情况如何!

更新

要使用与 payload 相同的 dir 定期对 <int-ftp:outbound-gateway> 执行 LS 命令,您必须这样配置:

<inbound-channel-adapter channel="inbound1" expresssion="'/'">
    <poller fixed-delay="10000"/>
</inbound-channel-adapter>

有了那个(和你的 <gateway>)案例,就没有必要将那个 inbound1 频道作为 <queue>