4

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

1 に答える 1

1

( Sftp.inboundAdapter())SftpInboundFileSynchronizingMessageSourceはリモート ファイルを 1 つずつ返します。まず第一に、それらをローカル ディレクトリに同期し、その後でのみFileペイロードとしてメッセージ処理のためにそれらをポーリングします。

taskExecutorそれらを並行して処理するには、e.poller()定義に a を追加するだけで十分であり、それらすべてmaxMessagesPerPoll(5)が異なるスレッドに分散されます。

于 2016-03-11T23:28:38.047 に答える