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