java - 使用 Apache Camel 生成 10 个文件后,从 SFTP 服务器读取文件

标签 java apache-camel

我正在使用 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/

相关文章:

java - 从资源中获取文件名(带路径)

jms - 分布式事务 Java JMS

java - 用于 TDD 的假 android 库

java - 打印 JEditorPane 时出现损坏的图像图标

java - 没有空格的字符串

java - 删除ArrayList中间的元素后结果是什么?

java - 如何将开始日期和结束日期作为参数从 jsp 页面到 jasper 报告

java - Camel 中的动态 to(URI)

JavaMail 使用来自 sun 内部 "saaj"包的 MimeMultipart

error-handling - Camel 交易错误