首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在处理过程中删除文件时,Apache Camel路由挂起

在处理过程中删除文件时,Apache Camel路由挂起
EN

Stack Overflow用户
提问于 2018-12-20 09:40:01
回答 1查看 787关注 0票数 1

我试图构建的程序使用Camel 2.18.5在Windows文件共享上使用文件,其他程序偶尔在共享文件夹中添加/修改/删除文件。

构建一个简单的测试路径

代码语言:javascript
复制
        from("file:///C:/Temp/from?readLock=changed&readLockCheckInterval=10000&readLockTimeout=0")
            .routeId("SimpleFileRoute")
            .to("file:/C:/Temp/to");

然后将文件test.txt放在from文件夹中,等待生成test.txt.camelLock文件的路由,然后在readLockCheckInterval通过之前手动删除test.txt,这将导致路由无限期挂起,而不会引发异常或处理任何其他文件。

“改变”似乎是唯一适合这种情况的readLock。

有没有办法使路由抛出异常、清理锁文件并继续使用文件?

编辑:似乎是路由的线程的堆栈跟踪如下:

代码语言:javascript
复制
Daemon Thread [Camel (camel-1) thread #2 - file:///C:/Temp/from] (Suspended)    
Thread.sleep(long) line: not available [native method]  
FileChangedExclusiveReadLockStrategy.sleep() line: 104  
FileChangedExclusiveReadLockStrategy.acquireExclusiveReadLock(GenericFileOperations<File>, GenericFile<File>, Exchange) line: 90    
GenericFileRenameProcessStrategy<T>(GenericFileProcessStrategySupport<T>).begin(GenericFileOperations<T>, GenericFileEndpoint<T>, Exchange, GenericFile<T>) line: 64    
GenericFileRenameProcessStrategy<T>.begin(GenericFileOperations<T>, GenericFileEndpoint<T>, Exchange, GenericFile<T>) line: 37  
FileConsumer(GenericFileConsumer<T>).processExchange(Exchange) line: 362    
FileConsumer(GenericFileConsumer<T>).processBatch(Queue<Object>) line: 223  
FileConsumer(GenericFileConsumer<T>).poll() line: 187   
FileConsumer(ScheduledPollConsumer).doRun() line: 174   
FileConsumer(ScheduledPollConsumer).run() line: 101 
Executors$RunnableAdapter<T>.call() line: 511   
ScheduledThreadPoolExecutor$ScheduledFutureTask<V>(FutureTask<V>).runAndReset() line: 308   
ScheduledThreadPoolExecutor$ScheduledFutureTask<V>.access$301(ScheduledThreadPoolExecutor$ScheduledFutureTask) line: 180    
ScheduledThreadPoolExecutor$ScheduledFutureTask<V>.run() line: 294  
RejectableScheduledThreadPoolExecutor(ThreadPoolExecutor).runWorker(ThreadPoolExecutor$Worker) line: 1142   
ThreadPoolExecutor$Worker.run() line: 617   
Thread.run() line: 745  
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-20 22:26:26

好的,所以问题是您使用了readLockTimeout=0,如果由于任何原因无法授予文件上的锁,它就会阻止读锁超时。您不应该真的这样做(坏主意),所以将其设置为更高的超时值。

另一方面,我们还可以改进camel核心,以检查文件是否仍然存在,检查是否已更改,如果文件不存在,则也可以退出检查。

我记录了一张关于这个的罚单:https://issues.apache.org/jira/browse/CAMEL-13025

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

https://stackoverflow.com/questions/53865940

复制
相关文章

相似问题

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