【问题标题】:Spring Integration Flow API does not response when empty remote directory空远程目录时 Spring Integration Flow API 不响应
【发布时间】:2020-04-14 05:20:42
【问题描述】:

我正在使用 spring 集成 SFTP 协议在远程入站和出站服务器上传输文件。当我的远程入站服务器目录包含任何文件时它工作正常,但当我的远程服务器目录为空时它不响应意味着没有文件。我正在使用以下代码

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() 并打印我们的消息。

【问题讨论】:

    标签: spring spring-boot spring-integration spring-integration-sftp


    【解决方案1】:

    Sftp.inboundAdapter(inboundSftp) 是一个基于轮询器配置的计划任务的SourcePollingChannelAdapter。如果没有来自源的数据来构建消息,它实际上不会对outputChannel 产生任何影响。但关键是触发器上的任务仍在执行,我们有一些钩子来捕捉那个阶段。

    为此,我们为其afterReceive() 实现提供了一个AbstractMessageSourceAdvice 组件。这是您可以执行“空远程目录”逻辑的地方。这样的Advice 必须注入poller(Pollers...advice())

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

    【讨论】:

    • Bilan 感谢您的帮助,它节省了我很多时间。根据我的代码需要,此解决方案适用于我。我将其标记为正确答案。很好的答案。
    【解决方案2】:

    使用出站网关(使用 LS 命令)获取远程文件列表。如果没有,您将得到一个空列表。

    【讨论】:

    • 灰色你的解决方案很好,但它需要一个新的 sftp 连接来执行 LS 命令,但我必须有一种方法可以集成到我的集成流程中。感谢您宝贵的时间。
    • 如果您使用CachingSessionFactory,将使用相同的会话。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 2022-10-18
    • 2011-05-03
    相关资源
    最近更新 更多