我正在使用 Apache Camel 开发一个项目,该项目使用 SFTP 将文件从一台服务器传输到另一台服务器。 SFTP 组件一次传输一个文件。我的要求是在源服务器中生成所有 10 个文件后,将 10 个文件从一台服务器传输到另一台服务器。例如,如果源服务器中生成了 9 个文件,则不应传输这些文件,而只能在再生成 1 个文件后才传输。谁能建议我如何做到这一点?
下面是我的路线类
@Override
public void configure() throws Exception {
errorHandler(defaultErrorHandler()
.maximumRedeliveries(3)
.redeliveryDelay(1000)
.retryAttemptedLogLevel(LoggingLevel.WARN));
from("direct:transferFile")
.process(requestProcessor)
.log("Input folder: ${exchangeProperty.inputEndpoint}")
.log("Output folder: ${exchangeProperty.outputEndpoint}")
.pollEnrich()
.simple("${exchangeProperty.inputEndpoint}").timeout(0).aggregationStrategy(requestAggregator)
.choice()
.when(body().isNotNull())
.toD("${exchangeProperty.outputEndpoint}", true)
.otherwise()
.log("Empty body, exiting")
.stop()
.end();
}
最佳答案
看看Aggregate EIP 。您可以使用将 completionSize
设置为 10 的 GroupedBodyAggregationStrategy
。这是一个很好的 article阅读有关该主题的内容。
我通常不使用 Java DSL,所以我只是结合了 Camel 文档中的一些示例。一般来说,你应该在你的 route 添加这样的内容
.convertBodyTo(String.class)
.aggregate(constant(true))
.aggregationStrategy(new GroupedBodyAggregationStrategy())
.completionSize(10)
.split(body())
.setHeader("CamelFileName", simple("${header.CamelSplitIndex}"))
.to("file://some/directory")
关于java - 使用 Apache Camel 生成 10 个文件后,从 SFTP 服务器读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59369634/