java - 使用 Spring 集成发送成功的 FTP 文件上传消息

标签 java spring spring-boot spring-integration

如何仅在成功的 FTP 文件传输时触发消息发送到 JdbcOutboundGateway?

我有以下集成流程。它正在根据需要将文件上传到 FTP 服务器。但是,然后我需要向数据库写入文件已成功上传的信息,或者如果 FTP 上传失败则更新记录。我无法弄清楚如何在文件传输成功时启动数据库更新。无论我在哪里尝试继续流程,它都会抛出一个异常,指出它是“单向”的。

  • ftpProps 包含各种 FTP 设置的所有配置值
  • outboundMessages 是放置需要通过 FTP 发送的消息的 channel
  • ftpSessionFactoryFactory 根据配置文件中的值构建所有各种 FtpSessionFactory 对象,然后路由器将通过检查 header 值来确定将消息发送到哪个对象

流程:

@Bean
public IntegrationFlow fromOutboundChannelToFtp(OutboundConfigurationProperties ftpProps,
                                                @Qualifier(OUTBOUND_CHANNEL) MessageChannel outboundMessages,
                                                @Qualifier(FTP_SESSION_FACTORY_FACTORY) FtpSessionFactoryFactory ftpSessionFactoryFactory) {
    return IntegrationFlows.from(outboundMessages)
            .route(RECEIVER_HEADER_SPEL, mapping -> {
                for (String receiverId : ftpProps.getFtp().keySet()) {
                    mapping.subFlowMapping(receiverId, sf -> {
                        sf.handleWithAdapter(adapter ->
                            adapter.ftp(ftpSessionFactoryFactory.getFactory(receiverId))
                            .fileNameExpression(FILENAME_HEADER_SPEL)
                            .autoCreateDirectory(true)
                            .remoteDirectory(ftpProps.getValue(receiverId, FtpProp.DIRECTORY))
                        );
                    });
                }
            })
            .get();
}

最佳答案

outboundMessages 设为发布/订阅 channel ,并使用 JDBC 适配器向其订阅第二个流。在路由器和 jdbc 适配器使用者上设置 order 属性,以确保以正确的顺序调用它们。

默认情况下,如果第一个消费者失败,则不会调用第二个消费者。

在流入口点( channel 的上游)使用错误 channel 来处理故障。

或者,将 ExpressionEvaluatingMessageHandlerAdvice 添加到 ftp 适配器,并在成功 channel 上添加 JDBC 适配器流,并在 失败 channel 上添加不同的更新流> channel 。

关于java - 使用 Spring 集成发送成功的 FTP 文件上传消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41452982/

相关文章:

java - 在 weblogic 12.1.3 C 中部署 webservice 的问题?

java - 将一个实例注入(inject)多个 bean

java - 为什么URLClassPath的getResources函数的返回值对象多了两个字段?

使用 DocumentBuilderFactory 解析 Java XML - 空节点?

java - JSR 181 : error in pom. xml

spring - 为什么在 Spring Boot 项目中找不到 SecurityEvaluationContextExtension 类?

java - 需要快速学习java框架的帮助

java - spring boot 应用程序使用的端口号

spring-boot - 如何实现动态@ConfigurationProperties 前缀

java - 是否可以从内部方法返回外部方法?