Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache camel 驼峰-处理后移动到文件夹_Apache Camel - Fatal编程技术网

Apache camel 驼峰-处理后移动到文件夹

Apache camel 驼峰-处理后移动到文件夹,apache-camel,Apache Camel,我正在编写一个代码,它轮询一个SFTP文件夹并逐个处理它们,然后在完成后将它们移动到一个成功文件夹。我们运行这个camel实例的次数超过1次。为了通过一个实例处理文件,我们进行了一次DB检查,就像一个camel实例获取该文件一样,它创建了一个标记记录,而任何其他实例来拾取该文件时,它将检查该标记记录并跳过该过程。因此,我们创建了一个自定义异常,如Markerdocument,可在处理该异常的处理器中使用。此标记异常将在全局处理,我们将其标记为已处理“true”,以便文件不会移动到/ERROR文件

我正在编写一个代码,它轮询一个SFTP文件夹并逐个处理它们,然后在完成后将它们移动到一个成功文件夹。我们运行这个camel实例的次数超过1次。为了通过一个实例处理文件,我们进行了一次DB检查,就像一个camel实例获取该文件一样,它创建了一个标记记录,而任何其他实例来拾取该文件时,它将检查该标记记录并跳过该过程。因此,我们创建了一个自定义异常,如Markerdocument,可在处理该异常的处理器中使用。此标记异常将在全局处理,我们将其标记为已处理“true”,以便文件不会移动到/ERROR文件夹。现在的问题是,由于我们正在处理这个问题,路由进程认为它已成功处理,并将文件夹移动到/success,这是我们不希望的,这将由实际的记录处理实例来处理。我们如何做到这一点

onException(MarkerDocumentExistsException.class)
        .process("routeExceptionProcessor")
        .log("Marker document available so continue next message processing... ")
        .handled(true)
        .stop();    
        onException(Exception.class)
        .process("routeExceptionProcessor")
        .log("Nothing to do here, move the file to error folder... ")
        .redeliveryDelay(2000)
        .stop();
    from(getSftpOptions())
        .routeId("sftp-Route")
        .throttle(Integer.parseInt(appProp.throttleCount))
        .timePeriodMillis(1000*60)
        .onCompletion()
        .onCompleteOnly()
            .process("routeCompleteProcessor")
            .log("Route processing is Completed : ${header.CamelFileNameOnly}")
            .end()
        .log("Starting the file process: ${header.CamelFileNameOnly}")
        .process("routeCBCheckProcessor")
        .unmarshal().gzipDeflater()
        .split(body().tokenizeXML("example", "*"),new SimpleStringAggregator()).streaming()
            .parallelProcessing(true)
            .process("lineProcessor")
        .end()
        .log("aggregate is completed :${header.CamelFileNameOnly}")

您开始使用幂等存储库构建幂等文件使用者

您是否尝试过使用(包括可选存储库)

我认为这也适用于SFTP,因为该组件具有
幂等
选项,并且SFTP组件是文件组件的扩展