gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:57:34 25 4
gpt4 key购买 nike

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

构建简单的测试路线

        from("file:///C:/Temp/from?readLock=changed&readLockCheckInterval=10000&readLockTimeout=0")
.routeId("SimpleFileRoute")
.to("file:/C:/Temp/to");

然后在from文件夹中放置一个文件test.txt,等待路由制作test.txt.camelLock文件,然后在readLockCheckInterval过去之前手动删除test.txt,将导致路由无限期挂起不引发异常或处理任何其他文件。

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

有没有办法让路由抛出异常,清理锁文件并继续消费文件?

编辑:似乎是路由的线程的堆栈跟踪是这样的:

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

最佳答案

好吧,问题是您使用 readLockTimeout=0 ,如果出于某种原因无法授予文件锁定,则可以防止读取锁定超时。您实际上不应该这样做(坏主意),因此将其设置为更高的超时值。

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

我已记录了有关此问题的票证:https://issues.apache.org/jira/browse/CAMEL-13025

关于java - 在处理过程中删除文件时 Apache Camel 路由挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53865940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com