我有一个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;
}
答案 0 :(得分:1)
Sftp.inboundAdapter()
(SftpInboundFileSynchronizingMessageSource
)无论如何都会逐个返回远程文件。首先,它将它们同步到本地目录,然后仅在它们轮询之后将消息处理为File
有效负载。
要并行处理它们,只需在taskExecutor
定义中添加e.poller()
,所有maxMessagesPerPoll(5)
将分发到不同的主题。