当前位置: 首页 > 知识库问答 >
问题:

如何在Java1.7中通过Spring DSL将消息从文件入站适配器传输到Sftp出站适配器

壤驷棋
2023-03-14
@Bean
public IntegrationFlow fileReadingFlow() {          
    return IntegrationFlows
            .from(fileMessageSource(),
                    new Consumer<SourcePollingChannelAdapterSpec>() {

                        @Override
                        public void accept(SourcePollingChannelAdapterSpec e) {
                            e.autoStartup(true).poller(Pollers.fixedRate(6000)
                                            .maxMessagesPerPoll(1));
                        }
                    }).transform(Transformers.fileToByteArray())
            .channel(MessageChannels.queue("fileReadingResultChannel"))
            .get();
}

@Bean
public MessageSource<File> fileMessageSource() {

    FileReadingMessageSource source = new FileReadingMessageSource();
    source.setDirectory(new File(localDir));    
    source.setAutoCreateDirectory(true);        
    return source;
}
@Bean
public IntegrationFlow sftpOutboundFlow() {
    System.out.println("enter out  bound flow.....");
    return IntegrationFlows
            .from("toSftpChannel")
            .handle(Sftp.outboundAdapter(this.sftpSessionFactory)
                    .remoteFileSeparator("\\")
                    .useTemporaryFileName(false)
                    .remoteDirectory(remDir)).get();
}

共有1个答案

东云
2023-03-14

您不需要将文件读入内存;sftp适配器将读取它并直接发送。

@Bean
public IntegrationFlow transferFlow() {
    return IntegrationFlows.from(Files.inboundAdapter(new File("/tmp/foo")),
                new Consumer<SourcePollingChannelAdapterSpec>() {

                    @Override
                    public void accept(SourcePollingChannelAdapterSpec e) {
                        e
                        .autoStartup(true)
                        .poller(Pollers
                            .fixedDelay(5000)
                            .maxMessagesPerPoll(1));
                    }
                })
            .handle(Sftp.outboundAdapter(this.sftpSessionFactory)
                    .useTemporaryFileName(false)
                    .remoteDirectory("destDir"))
            .get();
}

如果您希望将其保持为两个独立的流,只需使用通道bean将它们连接起来:

@Bean
public MessageChannel foo() {
    return new DirectChannel();
}

第一个以.channel(foo())结束,第二个以.from(foo())开始。

 类似资料:
  • 这就是我的配置 这个想法是每3秒轮询一个目录,并根据通道向调度程序发送3条消息,以允许异步执行。然后根据消息数量聚合消息,然后发送到下一个服务激活器。第一个服务激活器将文件放在源目录中,第二个服务激活器获取聚合列表以将这些文件移动到暂存目录。 似乎发生的情况是,源文件夹跳过了一些文件,但临时文件夹确实获取了所有文件。我的猜测是,轮询器将消息发送到dispatcher通道,但当其线程池变满时,它会忽

  • 如果我创建一个SFTP入站通道适配器,并使用在SFTP中配置为channel属性的通道发送一些文件。文件将传输到SFTP远程目录本地目录,还是直接从通道流到本地目录

  • 我有一个Sftp入站流,我从DefaultSftpSessionFactory获得了会话信息。但我需要动态实现从数据库表中获取的多个会话信息。这意味着我需要在集成流程中实现多个Sftp服务器细节。现在我已经完成了从单个源到单个目标的文件传输,但我需要实现多个源到多个目标。因此,任何人都可以提供一些关于这方面的建议。 这是我的会话工厂。。。这里我有一个单一的Sftp服务器信息,但如何配置多个服务器的

  • 流是Gateway-->RequsetChannel-->Transform-->OutboundMailChannl-->MailSender(MailAdapter)

  • 我们有一个入站通道适配器,用于接收事件通知。消费者标准的复杂性限制了我们使用简单路由键来分发消息的能力,因此应用程序使用分离器通过直接交换将消息发送到感兴趣的订户队列。 我们希望在出站通道适配器上使用publisher confirms,以确保传递到客户端队列。我们希望等待发布者确认原始消息,如果未收到发布者确认,或者如果,我们希望nack来自入站通道适配器的原始消息。 我假设这将在兔子模板的确认

  • 问题内容: Spring Integration FTP中的入站通道适配器和出站通道适配器之间有什么区别?我应该使用哪一个?何时使用? 我从文档中了解到,出站可以发送任何类型的文件(例如byte [],String,java.io.File),但入站仅限于文件类型。那仅仅是区别还是其他? 问题答案: 我建议您首先阅读理论 。 任何Inbound适配器都旨在从外部系统获取数据。Outbound-放置