首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >camel -处理后移动到文件夹

camel -处理后移动到文件夹
EN

Stack Overflow用户
提问于 2020-07-02 14:52:59
回答 1查看 201关注 0票数 0

我正在工作的代码,轮询SFTP文件夹,并处理他们一个接一个,然后移动到一个成功的文件夹,一旦它完成。我们运行这个camel实例超过1。为了通过一个实例处理文件,我们有一个DB检查,比如一旦camel实例获取文件,它就会创建一个标记记录,而任何其他实例选择该文件时,它将检查此标记记录并跳过该过程。因此,我们创建了一个自定义异常,如在处理器中可用的Markerdocument,它将处理该异常。此标记异常将在全局中处理,我们将它们标记为已处理“真”,以便文件不会被移动到/ERROR文件夹。现在的问题是,由于我们正在处理它,路由进程认为它已成功处理,并将文件夹移动到我们不想要的/success,这将由实际的记录处理camel实例处理。我们如何做到这一点呢?

代码语言:javascript
运行
复制
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}")
EN

回答 1

Stack Overflow用户

发布于 2020-07-03 13:35:28

那么,您开始构建一个具有幂等存储库的幂等文件消费者。

您是否尝试过使用built-in idempotent file consumer of Camel (包含可选存储库)?

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62690577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档