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

Spring integration 在Java1.7中,如何通过SpringDSL将消息从文件入站适配器传输到Sftp出站适配器,spring-integration,Spring Integration,我如何通过java 1.7中的Spring DSL将消息从我的文件入站适配器传输到Sftp出站适配器,因为我有两个单独的文件入站适配器和Sftp出站适配器流,但我无法从Sftp出站适配器发送消息,尽管我的入站适配器工作正常。 我想做一些像这样的事情。。。但我正在努力将这个东西转换为我的集成流 Message Message=this.fileReadingResultChannel.receive() 此.toSftpChannel.send(消息) 我被困在这里,无法继续前进,谁能帮我一下吗

我如何通过java 1.7中的Spring DSL将消息从我的文件入站适配器传输到Sftp出站适配器,因为我有两个单独的文件入站适配器和Sftp出站适配器流,但我无法从Sftp出站适配器发送消息,尽管我的入站适配器工作正常。 我想做一些像这样的事情。。。但我正在努力将这个东西转换为我的集成流

Message Message=this.fileReadingResultChannel.receive()
此.toSftpChannel.send(消息)

我被困在这里,无法继续前进,谁能帮我一下吗

我的文件入站流如下所示

@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;
}

您不需要将文件读入内存;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();
}

.channel(foo())
结束第一个,用
开始第二个。从(foo())
您不需要将文件读入内存;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();
}

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

开始。这似乎是的副本。只需将两个流用同一个通道连接在一起。你还不明白的是什么?嗨,加里,很抱歉我提出了一个愚蠢的问题,但我真的无法将这两个流正确地连接在一起。上一次你们告诉我,我需要在我的流中添加一个“PublishSubscribeChannel”,而这一点我无法继续,而且真的很挣扎。在我的另一个问题中,我也分享了我的新流程。因此,请您在该流程中提及如何使用此功能。之所以需要发布/订阅频道,是因为您想在sftp传输后做些什么-这次您根本没有提及。如果您只想检测一个文件并传输它,只需将上述流连接在一起。请更详细地解释您试图解决的问题。您好,Gary,是的,我需要查找本地目录中的所有文件,并通过Sftp出站适配器将这些文件传输到远程目录。这就是我编写两个流的原因,一个是文件入站,它检测本地目录中的文件,另一个是Sftp出站流,它将这些文件传输到远程目录。上面发布的两个流工作正常,但我无法将这两个流正确地连接在一起。在Sftp出站传输成功后,我不需要任何东西。这似乎是的副本。只需将两个流用同一个通道连接在一起。你还不明白的是什么?嗨,加里,很抱歉我提出了一个愚蠢的问题,但我真的无法将这两个流正确地连接在一起。上一次你们告诉我,我需要在我的流中添加一个“PublishSubscribeChannel”,而这一点我无法继续,而且真的很挣扎。在我的另一个问题中,我也分享了我的新流程。因此,请您在该流程中提及如何使用此功能。之所以需要发布/订阅频道,是因为您想在sftp传输后做些什么-这次您根本没有提及。如果您只想检测一个文件并传输它,只需将上述流连接在一起。请更详细地解释您试图解决的问题。您好,Gary,是的,我需要查找本地目录中的所有文件,并通过Sftp出站适配器将这些文件传输到远程目录。这就是我编写两个流的原因,一个是文件入站,它检测本地目录中的文件,另一个是Sftp出站流,它将这些文件传输到远程目录。上面发布的两个流工作正常,但我无法将这两个流正确地连接在一起。在Sftp出站转机成功后,我不需要任何东西。嗨,加里,非常感谢你的回答。。。。。。。。。。。。这也解决了我的问题,现在我能够理解如何将两个流连接在一起。嗨,Gary,非常感谢你的回答。。。。。。。。。。。。它解决了我的问题,现在我能够理解如何将这两个流连接在一起。
@Bean
public MessageChannel foo() {
    return new DirectChannel();
}