春季集成-来自sftp入站的聚合器

时间:2018-09-27 12:23:47

标签: spring-integration spring-integration-dsl

从包含多个文件的sftp入站消息源中聚合一条消息的最佳解决方案是什么? 我们在远程计算机上有3个需要接收的文件。之后,我们将这些文件的内容合并为一条json消息,然后将其转发。

public IntegrationFlow sftpIntegrationFlowBean() {
    final Map<String, Object> headers = new HashMap<>();
    headers.put("sftpFile", "sftpFile");
    final Consumer<AggregatorSpec> aggregator = t -> {
        t.sendPartialResultOnExpiry(true);
        t.expireGroupsUponCompletion(true);
        t.processor(new CustomMessageAggregator());
    };
    return IntegrationFlows
            .from(sftpInboundMessageSource(),
                    e -> e.id("sftpIntegrationFlow").poller(pollerMetadataSftp))
            .enrichHeaders(headers).aggregate(aggregator)
            .handle(customMessageSender).get();
}

轮询每15分钟轮询一次。 运行此代码时,会发生以下事情:

  1. 检索文件并处理其中一个
  2. 15分钟后处理第二个文件
  3. 再过15分钟后,将处理第三个文件
  4. 最后15分钟后,消息发送到目的地

如何一次完成所有操作而没有延迟?我确实使用FileReadingMessageSource尝试了此操作,但结果相同。

谢谢。

1 个答案:

答案 0 :(得分:0)

maxMessagesPerPoll中增加PollerMetadata