Spring 集成流程 API 在远程目录为空时不响应

Spring Integration Flow API does not response when empty remote directory

我正在使用 spring 集成 SFTP 协议在远程入站和出站上传输文件 servers.It 当我的远程入站服务器目录包含任何文件时工作正常但当我的远程服务器目录时它没有响应为空表示没有 file.I 正在使用以下代码

IntegrationFlows.from(Sftp.inboundAdapter(inboundSftp)
            .localDirectory(this.getlocalDirectory(config.getId()))
            .deleteRemoteFiles(true)
            .autoCreateLocalDirectory(true)
            .filter(new CompositeFileListFilter().addFilter(new LastModifiedLsEntryFileListFilter(config.getRegexFilter())))
            .remoteDirectory(config.getInboundDirectory())
            , e -> e.poller(Pollers.cron(config.getCron())
                    .errorChannel(MessageHeaders.ERROR_CHANNEL).errorHandler((ex) -> {
    })))

我只是想在控制台日志消息中添加这样的信息,当远程目录为空时,它必须显示为空远程目录或未找到文件。 我在这个问题上浪费了很多时间,但没有发现任何有成果的东西。请帮助我有什么方法可以检查 directory.empty() 并打印我们的消息。

Sftp.inboundAdapter(inboundSftp)是一个SourcePollingChannelAdapter根据poller配置的定时任务。如果没有来自源的数据来构建消息,它实际上不会在 outputChannel 中生成任何内容。但关键是触发器上的任务仍在执行,我们有一些钩子如何捕捉那个阶段。

为此,我们有一个 AbstractMessageSourceAdvice 组件用于其 afterReceive() 实施。这是您可以执行 "Empty Remote Directory" 逻辑的地方。这样的 Advice 然后必须注入 poller(Pollers...advice()).

在文档中查看更多信息:https://docs.spring.io/spring-integration/docs/5.3.0.M4/reference/html/core.html#conditional-pollers

使用出站网关(使用 ls 命令)获取远程文件列表。如果有 none.

,您将得到一个空列表