如何仅在成功的 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/