对于我的 SFTP 客户端项目,我使用 spring 集成。我们有不同的客户端,必须连接到不同的 SFTP 服务器,但是,所有逻辑都是相同的,所以我将它们抽象为 AbstractSFTPEndPoint。每个特定于客户端的类都实现 getClientId(),AbstractSFTPEndPoint 使用 getClientId() 来获取特定于客户端的详细信息,例如 SFTP 凭据。
然而,所有客户端的整个逻辑都是相同的,但我仍然必须为每个客户端实现特定的类。这主要是因为我们需要为每个客户端单独的“MessageSource”。
我怎样才能摆脱这种重复?
public class SFTPEndPointForClientAAAA extends AbstractSFTPEndPoint {
public String getClientId(){
return "clientAAAA";
}
@Bean(name = "channelForClientAAAA")
public QueueChannel inputFileChannel() {
return super.inputFileChannel();
}
@ServiceActivator(inputChannel = "channelForClientAAAA", poller = @Poller(fixedDelay = "500"))
public void serviceActivator(Message message) {
super.serviceActivator(message);
}
@Bean(name = "messageSourceForClientAAAA")
@InboundChannelAdapter(value = "channelForClientAAAA",
poller = @Poller(fixedDelay = "50", maxMessagesPerPoll = "2"))
public MessageSource messageSource() {
return super.messageSource();
}
}
基本上我有一堆 SFTP 主机可以连接并应用相同的逻辑。我希望这可以自动完成,而不必为每个 SFTP 主机实现类。
See 动态 ftp 示例 https://github.com/spring-projects/spring-integration-samples/tree/master/advanced/dynamic-ftp。它使用 XML,但同样的技术也适用于 Java 配置。它使用出站适配器;入站有点复杂,因为您可能需要将它们挂接到一个公共上下文中。自述文件中有有关如何执行此操作的链接。
不过我最近回答了一个使用 Java 配置的多个 IMAP 邮件适配器的类似问题 https://stackoverflow.com/questions/32826864/spring-multiple-imapadapter/32827733#32827733然后一个后续问题 https://stackoverflow.com/questions/32890833/message-channels-one-or-many/32891671#32891671.
您应该能够使用那里使用的技术。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)