需要在Spring Integration中并行处理多个文件

时间:2016-03-11 23:03:47

标签: java spring spring-integration dsl spring-integration-sftp

我有一个SFTP目录并读取文件并将文件发送到ServiceActivator进行进一步处理。我需要使用处理程序并行处理它们。

这是我的SPring Integration java DSL流程。

IntegrationFlows.from(Sftp.inboundAdapter(getSftpSessionFactory())
                        .temporaryFileSuffix("COPY")
                        .localDirectory(directory)
                        .deleteRemoteFiles(false)
                        .preserveTimestamp(true)
                        .remoteDirectory("remoteDir"))
                        .patternFilter("*.txt")), e -> e.poller(Pollers.fixedDelay(500).maxMessagesPerPoll(5)))
                        .handle("mybean", "myMethod")
                        .handle(Files.outboundAdapter(new File("success")))         
                        .deleteSourceFiles(true)
                        .autoCreateDirectory(true))
                        .get();

更新:这是我的ThreadPoolExecutor:

@Bean(name = "executor")
public Executor getExecutor()
{
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setCorePoolSize(4);
    executor.setMaxPoolSize(4);
    executor.setQueueCapacity(20);          
    executor.initialize();
    return executor;
}

1 个答案:

答案 0 :(得分:1)

Sftp.inboundAdapter()SftpInboundFileSynchronizingMessageSource)无论如何都会逐个返回远程文件。首先,它将它们同步到本地目录,然后仅在它们轮询之后将消息处理为File有效负载。

要并行处理它们,只需在taskExecutor定义中添加e.poller(),所有maxMessagesPerPoll(5)将分发到不同的主题。