我有一个基于 Spring Integration FTP 的 Spring Boot 应用程序,我可以在其中下载/上传文件。
我需要发送通过邮件收到的文件(作为 ZIP),但问题是,我只能对收到的文件的每条消息执行此操作,这意味着如果我收到 100 个文件,电子邮件收件人将收到 100 封电子邮件。这是因为 Spring Integration 一个接一个地处理消息。
我需要一种方法来聚合每次投票收到的文件并发送给收件人,而不是一个接一个地发送文件。
我试图想出一些想法,例如:
有人可以建议我如何实现这个:
public IntegrationFlow createIntFlow(MessageDirectory directory, ConcurrentMetadataStore metadataStore) {
var directoryName = directory.getDirectoryName();
var integrationFlowBuilder = IntegrationFlows
.from(getInboundAdapter(directory, metadataStore),
e -> e.id(directoryName + "-PerPoller")
.autoStartup(true)
.poller(Pollers
.cron(directory.getSchedule())
.taskExecutor(simpleAsyncTaskExecutor)
.errorChannel("errorChannel")
.maxMessagesPerPoll(-1)))
.log()
**integrationFlowBuilder.publishSubscribeChannel(s -> {
s.subscribe(sf -> sf.handle(c -> emailEmitter.createFileEvent(directory, c.getPayload().toString())));**
});
});
}
return integrationFlowBuilder.get();
}```