【问题标题】:Camel PollingConsumer - Deleting orphaned lock file, but original file is not deletedCamel PollingConsumer - 删除孤立锁文件,但未删除原始文件
【发布时间】:2014-06-27 18:27:02
【问题描述】:

我有一个简单的路径来获取以 .fin 结尾的文件,这些文件的正文是我必须发送到 ftp 服务器的文件名。这是路线:

<route id="sendToFtp">
    <from uri="file:{{tmp.files.location}}/export/pr?delete=true&amp;include=.*.txt.fin"/>
    <process ref="getFileProcess" />
    <log message="Sending message ${file:name}"/>
    <setHeader headerName="CamelFileName">
        <simple>${file:name.noext}</simple>
    </setHeader>
    <delay>
        <constant>10000</constant>
    </delay>
    <to uri="{{export.feed.ftp}}{{export.feed.ftp.folder}}?username={{export.feed.ftp.username}}&amp;password={{export.feed.ftp.password}}&amp;passiveMode=true&amp;connectTimeout={{feed.interval}}&amp;timeout={{feed.interval}}&amp;soTimeout={{feed.interval}}&amp;disconnect=true" />
</route>

我在文件中使用轮询消费者来检索本地文件以发送到 ftp。流程如下:

@Override
public void process(Exchange exchange) throws Exception {
    final String filename = exchange.getIn().getBody(String.class);

    Endpoint endpoint = exchange.getContext().getEndpoint("file:{{powerreviews.tmp.files.location}}/export/pr?delete=true&fileName="+filename);

    PollingConsumer consumer = endpoint.createPollingConsumer();

    consumer.start();
    Exchange ex = consumer.receive(60000);

    if (ex==null){
        exchange.getIn().setBody("");
    }else {
        exchange.getIn().setBody(ex.getIn().getBody());
    }
    consumer.stop();
}

当我执行路由时,似乎在路由结束后交换没有关闭,导致我的文件 .fin 和我使用 pollingConsume 使用的文件没有被删除,当我在端点中明确有 delete=true 时范围。无论如何,文件已正确发送到 ftp。

在日志中我有以下内容:

2014-06-27 20:23:03,765 | WARN  | roduct/export/pr | kerFileExclusiveReadLockStrategy | 100 - org.apache.camel.camel-core - 2.10.7 | Deleting orphaned lock file: tmp/product/export/pr/the.txt.fin.camelLock
2014-06-27 20:28:08,041 | WARN  | roduct/export/pr | kerFileExclusiveReadLockStrategy | 100 - org.apache.camel.camel-core - 2.10.7 | Deleting orphaned lock file: tmp/product/export/pr/the.txt.camelLock

【问题讨论】:

  • 阅读ConsumerTemplate的javadoc文档你会发现!

标签: apache-camel apache-servicemix


【解决方案1】:

文件没有被删除,因为Exchange ex返回的消费者模板上的onCompletion没有被执行。 javadoc 文档对此进行了更详细的说明。

但是由于你想稍后删除过滤器,所以你可以先将它上传到FTP服务器,你需要将onCompletions从Exchange ex移交给Exchange exchange,所以在该方法的末尾添加此代码

    }
    consumer.stop();

    // handover from me to the incoming exchange
    // so we will delete the file at the end of the route
    ex.handoverCompletions(exchange);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 2018-02-12
    • 1970-01-01
    • 2010-11-11
    • 2022-12-06
    • 2017-01-06
    • 1970-01-01
    相关资源
    最近更新 更多